天天看點

Docker的安裝以及使用Docker安裝jenkins,gogs,tomcat(一)

(1)Docker的安裝  官網安裝連結 :https://yeasy.gitbooks.io/docker_practice/content/

解除安裝舊版本 舊版本的 Docker 稱為 docker 或者 docker-engine

使用以下指令解除安裝舊版本:

$ sudo yum remove docker

\ docker-common

\ docker-selinux

\ docker-engine

使用 yum 安裝 執行以下指令安裝依賴包:

$ sudo yum install -y yum-utils

\ device-mapper-persistent-data

\ lvm2 鑒于國内網絡問題,強烈建議使用國内源,官方源請在注釋中檢視。

執行下面的指令添加 yum 軟體源:

$ sudo yum-config-manager

\ --add-repo

\ https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

更新 yum 軟體源緩存,并安裝 docker-ce 。

$ sudo yum makecache fast $ sudo yum install docker-ce

啟動 Docker CE

$ sudo systemctl enable docker

$ sudo systemctl start docker

建立 docker 組:

$ sudo groupadd docker

将目前使用者加入 docker 組:

$ sudo usermod -aG docker $USER

測試 Docker 是否安裝正确 $ docker run hello-world

Unable to find image 'hello-world:latest' locally latest:

Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c

Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/

若能正常輸出以上資訊,則說明安裝成功

預設配置下,如果在 CentOS 使用 Docker CE 看到下面的這些警告資訊:

WARNING: bridge-nf-call-iptables is disabled

WARNING: bridge-nf-call-ip6tables is disabled

請添加核心配置參數以啟用這些功能。

$ sudo tee -a /etc/sysctl.conf <<-EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

然後重新加載 sysctl.conf 即可

$ sudo sysctl -p

docker run -itd -v /var/jenkins_home:/var/jenkins jenkins

這裡的 -v /var/jenkins_home:/var/jenkins

是指将本地的資料卷内容挂在到容器。

/var/jenkins_home:為本地目的,這裡需要先從容器中将需要的複制内容通過docker cp指令到本地,然後再重新使用docker run指令啟動容器。

/var/jenkins:為容器的目錄,這裡會将本地的目錄内容映射過來。

(2)docker 安裝 jenkins (參照:http://blog.csdn.net/mmd0308/article/details/77206563?locationNum=6&fps=1)

docker pull jenkins #擷取jenkins鏡像

mkdir /home/jenkins  #建立目錄作為資料卷 

docker run -itd -p 8080:8080 -p 50000:50000 --name=jenkins  -v /home/jenkins:/var/jenkins_home jenkins  # 最後的jenkins ,是你pull下來的鏡像名

  • -p 8080:8080 -p 50000:50000

    進行端口映射
  • -v /home/jenkins:/var/jenkins_home

    磁盤挂載

然後就可以通過 http://主機IP:8080通路jenkins了

(3)docker安裝gogs (參照:https://github.com/gogits/gogs/tree/master/docker)

  建議先建立 /var/gogs目錄

# Pull image from Docker Hub.
$ docker pull gogs/gogs

# Create local directory for volume.
$ mkdir -p /var/gogs

# Use `docker run` for the first time. $ docker run --name=gogs -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs # Use `docker start` if you have stopped it. $ docker start gogs

然後可以通過 http://主機IP:10080通路gogs


(4)docker安裝tomcat(參照:https://hub.docker.com/_/tomcat/)
docker pull tomcat:8.0 #後面的版本号根據需求寫
建立目錄 mkdir /usr/local/tomcat
docker run -itd -p 8080:8080 --name tomcat --restart=always -v /usr/local/tomcat:/var/tomcat_home tomcat:8.0 #這裡最後一定要寫你pull後面的全名 tomcat:8.0
前面的參數都差不多 
--restart=always #表示一直啟動這個Tomcat (需要背景啟動的軟體運作時都可以加上這個參數)
      

Docker基本概念:

Union File System(Union FS) : 輕量級的高性能的分層檔案系統,支援将檔案系統中的修改進行送出和層層疊加,這個特性使得鏡像可以通過分層實作和繼承同時支援将不同目錄挂載到同一個虛拟檔案系統下。

鏡像的建構:鏡像建構時,會一層層建構,前一層是後一層的基礎。每一層建構完就不會再發生改變,後一層上的任何改變隻發生在自己這一層。比如,删除前一層檔案的操作,實際不是真的删除前一層的檔案,而是僅在目前層标記為該檔案已删除。在最終容器運作的時候,雖然不會看到這個檔案,但是實際上該檔案會一直跟随鏡像。是以,在建構鏡像的時候,需要額外小心,每一層盡量隻包含該層需要添加的東西,任何額外的東西應該在該層建構結束前清理掉。

Docker容器:容器的實質是程序,但與直接在宿主執行的程序不同,容器程序運作于屬于自己的獨立的 命名空間。是以容器可以擁有自己的 root 檔案系統、自己的網絡配置、自己的程序空間,甚至自己的使用者 ID 空間。容器内的程序是運作在一個隔離的環境裡,使用起來,就好像是在一個獨立于宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運作更加安全。

鏡像和容器的關系:鏡像(Image)和容器(Container)的關系,就像是面向對象程式設計中的 類 和 執行個體 一樣,鏡像是靜态的定義,容器是鏡像運作時的實體。容器可以被建立、啟動、停止、删除、暫停等。

Docker 最佳實踐的要求,容器不應該向其存儲層内寫入任何資料,容器存儲層要保持無狀态化。所有的檔案寫入操作,都應該使用 資料卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網絡存儲)發生讀寫,其性能和穩定性更高。

資料卷的生存周期獨立于容器,容器消亡,資料卷不會消亡。是以,使用資料卷後,容器删除或者重新運作之後,資料卻不會丢失。

Docker倉庫:一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個标簽(Tag);每個标簽對應一個鏡像。

原生應用程式: 外觀和運作起來的性能是最佳的  (性能原生就是指性能最佳)

Docker鏡像:Docker 鏡像是一個特殊的檔案系統,除了提供容器運作時所需的程式、庫、資源、配置等檔案外,還包删除容器:可以使用 docker container rm 來删除一個處于終止狀态的容器。例如

$ docker container rm trusting_newton

如果要删除一個運作中的容器,可以添加 -f 參數。Docker 會發送 SIGKILL 信号給容器。

鏡像不包含任何動态資料,其内容在建構之後也不會被改變。

建構docker的連接配接:http://www.linuxidc.com/Linux/2015-07/120287.htm

查找某些特定的軟體包:yum search vim

dangling images: 是指那些為 none的鏡像,可以通過 docker image prune  來删除

docker删除本地鏡像: docker image rm 【id】    docker image rm 7c1(ID前三位)

docker停止所有的鏡像 docker stop $(docker ps -a -q)

docker删除所有的容器:docker rm $(docker ps -a -q)

運作Dockerfile建立的鏡像:docker run --name web2 -d -p 81:80 nginx:v2

COPY和 ADD:此在 COPY 和 ADD 指令中選擇的時候,可以遵循這樣的原則,所有的檔案複制均使用

COPY 指令,僅在需要自動解壓縮的場合使用 ADD

Docker檢視所有鏡像:docker image ls

容器和鏡像的删除:https://www.cnblogs.com/q4486233/p/6482711.html

建構鏡像和啟動容器:

使用 docker build 來建構這個鏡像:

$ docker build -t myweb:v1 .

建構好了後,我們啟動一個容器:

$ docker run -d --name web -p 80:80 myweb:v1

Docker主要指令:  (這是可以檢視鏡像的網址:https://hub.docker.com/explore/)

docker search nginx     #查詢nginx,如果有可以直接pull

docker pull nginx    #從docker hub 中擷取nginx的鏡像 

docker image ls  #檢視本地所有的鏡像    //docker images 等價于 docker image ls :列出所有鏡像

docker run 指令可以使得鏡像産生容器  ,啟動程式

示例: docker run -itd -p 80:80 --name nginx -v /var/nginx:/var/nginx_home ngnix

-i 讓容器的标準輸入保持打開。

-t 選項讓Docker配置設定一個僞終端(pseudo-tty)并綁定到容器的标準輸入上。

-d: 需要讓 Docker 在背景運作而不是直接把執行指令的結果輸出在目前主控端下。

-p: 指定端口,前面的80是你通路的端口,後面80是該程式本來的端口

--name : 是你的容器名

-v :定義資料卷  /var/nginx是資料卷的位置,/var/nginx_home是資料卷挂載目錄

docker ps #列出所有在運作的容器

docker ps -a #列出所有的容器(運作、不運作)

docker rm 容器id #删除容器(正在運作的容器删除 需要先執行 docker stop 容器id 指令)

docker start 容器id :重新啟動容器

轉載于:https://www.cnblogs.com/DFX339/p/8318433.html