(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 :重新啟動容器