安装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
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 常用命令
连接容器
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条容器日志