安裝Docker
Docker 要求 CentOS 系統的內核版本高於 3.10 , uname -r 命令查看你當前的內核版本
1 安裝一些必要的系統工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2 添加軟件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3 更新 yum 緩存:
sudo yum makecache fast
4 安裝 Docker-ce:
sudo yum -y install docker-ce
5 啟動 Docker 后台服務
sudo systemctl start docker
6 配置 鏡像加速
vim /etc/docker/daemon.json
{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }
docker刪除命令
sudo yum remove docker-ce
sudo rm -rf /var/lib/docker
Docker 安裝mysql
1 查找Docker Hub上的mysql鏡像
docker search mysql
2 這里我們拉取官方的鏡像,標簽為5.6
docker pull mysql:5.6
3 等待下載完成后,我們就可以在本地鏡像列表里查到REPOSITORY為mysql,標簽為5.6的鏡像。
docker images |grep mysql
使用 mysql 鏡像
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
命令說明:
-
-p 3306:3306:將容器的 3306 端口映射到主機的 3306 端口。
-
-v -v $PWD/conf:/etc/mysql/conf.d:將主機當前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。
-
-v $PWD/logs:/logs:將主機當前目錄下的 logs 目錄掛載到容器的 /logs。
-
-v $PWD/data:/var/lib/mysql :將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。
-
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。
查看容器啟動情況
docker ps
登陸mysql
mysql -u root -p
Docker 安裝Nginx
1 查找 Docker Hub 上的 nginx 鏡像
docker search nginx
2 這里我們拉取官方的鏡像
docker pull nginx
3 等待下載完成后,我們就可以在本地鏡像列表里查到 REPOSITORY 為 nginx 的鏡像。
docker images nginx
4 以下命令使用 NGINX 默認的配置來啟動一個 Nginx 容器實例:
docker run --name runoob-nginx-test -p 8081:80 -d nginx
runoob-nginx-test
容器名稱。- the
-d
設置容器在在后台一直運行。 - the
-p
端口進行映射,將本地 8081 端口映射到容器內部的 80 端口。
執行以上命令會生成一串字符串,類似 1dd4380ba70820bd2acc55ed2b326dd8c0ac7c93f68f0067daecad82aef5f938,這個表示容器的 ID,一般可作為日志的文件名。
5 我們可以使用 docker ps 命令查看容器是否有在運行:
docker ps
6 PORTS 部分表示端口映射,本地的 8081 端口映射到容器內部的 80 端口。
在瀏覽器中打開 http://127.0.0.1:8081/,效果如下:
nginx 部署
首先,創建目錄 nginx, 用於存放后面的相關東西
mkdir -p ~/nginx/www ~/nginx/logs ~/nginx/conf
拷貝容器內 Nginx 默認配置文件到本地當前目錄下的 conf 目錄,容器 ID 可以查看 docker ps 命令輸入中的第一列:
docker cp 6dd4380ba708:/etc/nginx/nginx.conf ~/nginx/conf
- www: 目錄將映射為 nginx 容器配置的虛擬目錄。
- logs: 目錄將映射為 nginx 容器的日志目錄。
- conf: 目錄里的配置文件將映射為 nginx 容器的配置文件。
部署命令
docker run -d -p 8082:80 --name runoob-nginx-test-web -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/logs:/var/log/nginx nginx
-
-p 8082:80: 將容器的 80 端口映射到主機的 8082 端口。
-
--name runoob-nginx-test-web:將容器命名為 runoob-nginx-test-web。
-
-v ~/nginx/www:/usr/share/nginx/html:將我們自己創建的 www 目錄掛載到容器的 /usr/share/nginx/html。
-
-v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:將我們自己創建的 nginx.conf 掛載到容器的 /etc/nginx/nginx.conf。
-
-v ~/nginx/logs:/var/log/nginx:將我們自己創建的 logs 掛載到容器的 /var/log/nginx。
cd ~/nginx/www
創建 index.html 文件,效果如下:
相關命令
如果要重新載入 NGINX 可以使用以下命令發送 HUP 信號到容器:
docker kill -s HUP container-name
重啟 NGINX 容器命令:
docker restart container-name
Docker 安裝 Tomcat
1 查找Docker Hub上的tomcat鏡像
docker search tomcat
2 這里我們拉取官方的鏡像
docker pull tomcat
3 等待下載完成后,我們就可以在本地鏡像列表里查到REPOSITORY為tomcat的鏡像。
docker images|grep tomcat
使用tomcat鏡像
docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat
命令說明:
-p 8080:8080:將容器的8080端口映射到主機的8080端口
-v $PWD/test:/usr/local/tomcat/webapps/test:將主機中當前目錄下的test掛載到容器的/test
查看容器啟動情況
docker ps
通過瀏覽器訪問
Docker 安裝 java
1 查找Docker Hub上的java jdk鏡像
docker pull java:8u111
2 這里我們拉取官方的鏡像
docker pull java:8u111
3 使用鏡像
docker run -d -p 9090:9090 -v /usr/springboot-1.jar:/usr/springboot-1.jar --name springboot java:8u111 java -jar /usr/springboot-1.jar
命令說明:
- -d 表示在后台啟動
- -p 9090:9090 表示將容器的端口 映射成宿主主機的端口,否則9090端口訪問不到
- -v /usr/springboot-1.jar:/usr/springboot-1.jar 表示將宿主主機的jar文件,映射到容器中(分號前為宿主主機的路徑,分號后為容器中的路徑)
- --name springboot 表示為該容器取一個全局唯一的名稱,這里我取的名稱為springboot
- java:8u111 表示鏡像文件的名稱和tag
- java -jar /usr/springboot-1.jar 表示運行jar包,注意:這里的jar包為容器中的位置,是通過前面的-v屬性映射的
查看鏡像
docker images
Docker 安裝 rabbit
1 查找Docker Hub上的rabbit鏡像
docker search rabbitmq:3-managemen
2 這里我們拉取官方的鏡像
docker pull rabbitmq:3-managemen
3 使用鏡像
第一種是 默認生成的 登陸名guest 密碼guest
第二只種 可設置密碼
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:3-management
命令說明:
- -d 后台運行容器;
- --name 指定容器名;
- -p 指定服務運行的端口(5672:應用訪問端口;15672:控制台Web端口號);
- -v 映射目錄或文件;
- --hostname 主機名(RabbitMQ的一個重要注意事項是它根據所謂的 “節點名稱” 存儲數據,默認為主機名);
- -e 指定環境變量;(RABBITMQ_DEFAULT_VHOST:默認虛擬機名;RABBITMQ_DEFAULT_USER:默認的用戶名;RABBITMQ_DEFAULT_PASS:默認用戶名的密碼)
Docker 安裝 Redis
1 查找Docker Hub上的Redis鏡像
docker search redis
2 這里我們拉取官方的鏡像
docker pull redis:5.0
3 使用鏡像
docker run -p 6379:6379 -v $PWD/data:/data -d redis:3.2 redis-server --appendonly yes
4 連接容器
docker exec -it 4655d050c898 redis-cli
5 查看容器信息
info
Docker 安裝 Jenkins
1.pull一個jenkins鏡像
docker pull jenkins/jenkins:lts
這個是安裝最新版的jenkins,如果安裝舊版本,很多插件安裝不上,docker環境下升級又比較麻煩。
2.查看已經安裝的jenkins鏡像
docker images
3.創建一個jenkins目錄
mkdir /home/jenkins_home
4.啟動一個jenkins容器
docker run -d --name jenkins -p 8082:8080 -v /home/jenkins:/home/jenkins jenkins/jenkins:lts ;
5.查看jenkins服務
docker ps | grep jenkins或者docker ps
6.訪問http://39.108.62.247:8082/
7.進入容器內部
docker exec -it jenkins /bin/bash;
8.執行:cat /var/jenkins_home/secrets/initialAdminPassword,得到密碼並粘貼過去,然后就安裝完成了
Docker 安裝 Gogs(搭建git網站)
1 pull一個gogs鏡像
docker pull gogs/gogs
2 創建gogs的存儲目錄
mkdir -p /var/gogs
3 運行鏡像 生成容器
docker run --name=gogs -d -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs
4 訪問 http://xxx.xxx.xxx.xxx:10080/
docker 常用命令
docker服務自動重啟設置
systemctl enable docker.service
docker容器自動啟動設置
docker update --restart=always <CONTAINER ID>
在使用docker run啟動容器時,也可以使用--restart參數來設置:
連接容器
docker exec -it 容器ID或者容器名 /bin/bash
查看容器映射的端口
docker container port 容器ID
docker cp命令
語法:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
OPTIONS說明:
-L :保持源目標中的鏈接
實例
將主機/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下
docker cp /www/runoob 96f7f14e99ab:/www/
將主機/www/runoob目錄拷貝到容器96f7f14e99ab中,目錄重命名為www
docker cp /www/runoob 96f7f14e99ab:/www
將容器96f7f14e99ab的/www目錄拷貝到主機的/tmp目錄中
docker cp 96f7f14e99ab:/www /tmp/
容器操作
運行容器
使用命令:docker run --name container-name:tag -d image-name
- --name:自定義容器名,不指定時,docker 會自動生成一個名稱
- -d:表示后台運行容器
- image-name:指定運行的鏡像名稱以及 Tag
如下所示啟動 docker.io/tomcat 鏡像成功,前綴 docker.io 可以不寫,后面的 tag 版本號要指定。可以使用 docker ps 命令查看容器
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/tomcat 8.5.32 5808f01b11bf 35 hours ago 463 MB [root@localhost ~]# docker run --name myTomcat -d tomcat:8.5.32 1cbabce49b840d14ab01e25e0d282737b853681debdc541fddf27b508906a62a [root@localhost ~]#
查看容器
使用 docker ps 命令 查看正在運行的所有容器,加上 -a 參數可以查看所有容器(即無論是否運行中)
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/tomcat 8.5.32 5808f01b11bf 35 hours ago 463 MB [root@localhost ~]# docker run --name myTomcat -d tomcat:8.5.32 1cbabce49b840d14ab01e25e0d282737b853681debdc541fddf27b508906a62a [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1cbabce49b84 tomcat:8.5.32 "catalina.sh run" 4 minutes ago Up 4 minutes 8080/tcp myTomcat [root@localhost ~]#
CONTAINER ID:容器 di
IMAGE:鏡像名稱:Tag
COMMAND:命令
CREATES:容器創建的時刻
STATUS:容器當前的狀態 (up 表示運行、Exited 表示停止運行)
PORTS:鏡像程序使用的端口號
注意此時雖然容器已經在運行中,Tomcat 鏡像占用8080端口,但是這個8080端口是 Docker 容器內部的端口,並不是服務器的端口,所以必須做 端口映射 將服務器的實際端口映射到 Docker 容器中的端口才能訪問。
停止容器
使用 docker stop container-name/container-id 命令進行停止容器運行,指定容器名或者容器 id 即可
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1cbabce49b84 tomcat:8.5.32 "catalina.sh run" 14 minutes ago Up 14 minutes 8080/tcp myTomcat [root@localhost ~]# docker stop 2cbabce49b66 1cbabce49b84 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1cbabce49b84 tomcat:8.5.32 "catalina.sh run" 16 minutes ago Exited (143) About a minute ago myTomcat [root@localhost ~]#
啟動容器
使用 docker start container-name/container-id 命令啟動停止運行的容器,同理可以根據 容器名或者 容器 id 進行啟動
[root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1cbabce49b84 tomcat:8.5.32 "catalina.sh run" About an hour ago Exited (143) About an hour ago myTomcat [root@localhost ~]# docker start 1cbabce49b84 1cbabce49b84 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1cbabce49b84 tomcat:8.5.32 "catalina.sh run" About an hour ago Up 3 seconds 8080/tcp myTomcat [root@localhost ~]#
刪除容器
- 使用 docker rm container-id 命令 刪除容器,刪除容器前,必須先停止容器運行,根據 容器 id 進行刪除
- rm 參數是刪除容器,rmi 參數是刪除鏡像
- 鏡像運行在容器中,docker 中可以運行多個互補干擾的容器,可以將同一個鏡像在多個容器中進行運行
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1cbabce49b84 tomcat:8.5.32 "catalina.sh run" About an hour ago Up 3 seconds 8080/tcp myTomcat [root@localhost ~]# docker stop myTomcat myTomcat [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1cbabce49b84 tomcat:8.5.32 "catalina.sh run" About an hour ago Exited (143) 3 seconds ago myTomcat [root@localhost ~]# docker rm 66cbabce49b8 1cbabce49b84 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost ~]#
端口映射
使用命令:docker run --name container-name:tag -d -p 服務器端口:Docker 端口 image-name
--name:自定義容器名,不指定時,docker 會自動生成一個名稱
-d:表示后台運行容器
image-name:指定運行的鏡像名稱以及 Tag
-p 表示進行服務器與 Docker 容器的端口映射,默認情況下容器中鏡像占用的端口是 Docker 容器中的端口與外界是隔絕的,必須進行端口映射才能訪問
- 如下所示:服務器防火牆先開放了 8080、8090 端口,否則防火牆不開放端口的話,從其它電腦也是無法訪問服務器的
- 然后 運行了 兩個容器,容器名稱分別指定為 "myTomcat1"、"myTomcat2"、兩個容器中都是同一個 docker.io/tomcat:8.5.32 鏡像
- 兩個容器都指定了端口映射,分別是8080、8090 ,都會轉發到 Docker 容器內部
[root@localhost ~]# firewall-cmd --zone=public --list-port 9876/tcp 8090/tcp 80/tcp 8080/tcp [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/tomcat 8.5.32 5808f01b11bf 38 hours ago 463 MB [root@localhost ~]# docker run --name myTtomcat1 -d -p 8080:8080 tomcat:8.5.32 d67cca0aacf7cc4a91112721769ba56aadbe55e8e78ff6749528cf5cecb38f6e [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d67cca0aacf7 tomcat:8.5.32 "catalina.sh run" 19 seconds ago Up 17 seconds 0.0.0.0:8080->8080/tcp myTtomcat1 [root@localhost ~]# docker run --name myTtomcat2 -d -p 8090:8080 tomcat:8.5.32 0f6df57a7fa189710c0d2c3088334a7ff725c7e57eea71220ffb67049eaf5f5a [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f6df57a7fa1 tomcat:8.5.32 "catalina.sh run" 3 seconds ago Up 1 second 0.0.0.0:8090->8080/tcp myTtomcat2 d67cca0aacf7 tomcat:8.5.32 "catalina.sh run" 53 seconds ago Up 51 seconds 0.0.0.0:8080->8080/tcp myTtomcat1 [root@localhost ~]#
啟動成功之后,ip addr show 查一下服務器 ip 地址( 39.108.62.247),然后就能從物理機上訪問了
[root@localhost ~]# ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:ea:9e:7f brd ff:ff:ff:ff:ff:ff inet 39.108.62.247/24 brd 192.168.58.255 scope global noprefixroute dynamic eno16777736 valid_lft 1771sec preferred_lft 1771sec inet6 fe80::20c:29ff:feea:9e7f/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:9d:e0:f0:14 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:9dff:fee0:f014/64 scope link valid_lft forever preferred_lft forever 9: veth8675b32@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether be:8c:64:6e:2b:08 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::bc8c:64ff:fe6e:2b08/64 scope link valid_lft forever preferred_lft forever 11: vethb98436b@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 26:ae:79:9a:05:7b brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::24ae:79ff:fe9a:57b/64 scope link valid_lft forever preferred_lft forever [root@localhost ~]#
容器日志
使用 docker logs container-name/container-id 命令 可以查看容器日志信息,指定容器名或者 容器 id 即可
命令說明:
-
-f : 跟蹤日志輸出
-
--since :顯示某個開始時間的所有日志
-
-t : 顯示時間戳
-
--tail :僅列出最新N條容器日志
查看容器詳情
docker inspect 容器ID