Docker 的基本使用:
1、启动 docker
systemctl start docker
2、重启 docker
systemctl restart docker
3、关闭 docker
systemctl stop docker
systemctl stop docker.socket
4、拉取 docker 镜像 (nginx为例)
docker pull nginx
5、查看已成功拉取的 docker 镜像
docker images
6、运行 docker 镜像生成容器(nginx为例)
docker run --name my_nginx -p 8080:80
-v /usr/docker/myNginx/html:/usr/share/nginx/html
-v /usr/docker/myNginx/conf.d:/etc/nginx/conf.d
-v /usr/docker/myNginx/logs:/var/log/nginx
-d nginx
参数说明:
- -v /usr/docker/myNginx/html:/usr/share/nginx/html :映射nginx静态页面目录系统目录便于部署静态页面项目。
- -v /usr/docker/myNginx/conf.d:/etc/nginx/conf.d 映射nginx配置文件目录到系统目录便于配置nginx。
- -v /usr/docker/myNginx/logs:/var/log/nginx设置nginx日志文件到系统目录便于查看nginx日志。
- --name my_nginx:自定义容器名称。
- -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
- -d:设置容器在在后台一直运行。
7、查看正在运行的 docker 容器
docker ps
8、查看所有 docker 容器(启动和未启动的)
docker ps -a
9、启动容器
docker start 容器id
10、重启容器
docker restart 容器id
11、关闭容器
docker stop 容器id
12、进入容器
docker exec -it 容器id /bin/bash
参数说明:
- -i:交互式操作。
- -t:终端。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
13、退出容器终端
exit
14、拷贝容器终端中的文件到主机上(前者到后者)
docker cp 容器名:/etc/nginx/conf.d /usr/docker/myNginx
15、删除容器
docker rm 容器id
16、删除镜像
docker rmi 镜像id
17、同步容器和宿主机的时间
宿主机使用的是CST时间,容器使用的是UTC时间,相差8个小时。
# 1、进入容器
docker exec -it 容器名/容器编号 /bin/bash
# 2、备份容器时间文件
mv /etc/localtime /etc/localtime_bak
# 3、拷贝上海时间文件来替换原来的
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 4、确认容器时间时间修改成功
date
18、查看容器的挂载目录
docker inspect 容器名称/容器编号 | grep Mounts -A 30
19、修改已运行的容器挂载目录
场景:我之前挂载了个images目录,现在想将它修改为static目录,用于存放所有的静态资源。
#1、查看需要修改的容器id
docker ps
#2、停止docker。
systemctl stop docker.socket
#3、修改容器的配置文件config.v2.json
vim /var/lib/docker/containers/容器id/config.v2.json
#将下图中黄色标记的内容修改为static。
"/usr/share/nginx/static":{"Source":"/usr/docker/myNginx/static","Destination":"/usr/share/nginx/static","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/usr/docker/myNginx/static","Target":"/usr/share/nginx/static"},"SkipMountpointCreation":false}
#4、修改容器的配置文件hostconfig.json
vim /var/lib/docker/containers/容器id/hostconfig.json
#将下图中黄色标记的内容修改为static。
"/usr/docker/myNginx/static:/usr/share/nginx/static"
#5、启动docker(目录不存在,他会自动生成目录)
systemctl start docker
20、centos7重启防火墙导致docker容器无法启动
原因:
centos7 自带防火墙是firewalld。firewall的底层是使用iptables进行数据过滤,建立在iptables之上。当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。当你使用的是 Systemd 的时候, firewalld 会在 Docker 之前启动,但是如果你在 Docker 启动之后再启动 或者重启 firewalld ,你就需要重启 Docker 进程了。
解决方案:
关闭所有docker容器,然后重启docker服务。
systemctl stop docker.socket
systemctl strart docker
21、查看docker中容器的版本
docker image inspect nginx:latest | grep -i version
或者:
curl -I ip地址
22、修改已创建容器的端口映射关系(路径映射类似)
#1、查看容器的信息
docker ps -a
#2、查看容器的端口映射情况,在容器外执行:
docker port 容器ID 或者 docker port 容器名称
#3、查找要修改容器的全ID
docker inspect 容器ID |grep Id
#4、进到/var/lib/docker/containers 目录下找到与全 Id 相同的目录,修改 其中的hostconfig.json 和 config.v2.json文件:
#注意:若该容器还在运行中,需要先停掉
docker stop 容器ID
#再停掉docker服务
systemctl stop docker.socket
#5、修改hostconfig.json如下
#格式如:"{容器内部端口}/tcp":[{"HostIp":"","HostPort":"映射的宿主机端口"}]
"PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"8080"}],"443/tcp":[{"HostIp":"","HostPort":"443"}]}
#6、修改config.v2.json在ExposedPorts中加上要暴露的端口
#格式如:"{容器内部端口}/tcp":{}
"ExposedPorts":{"80/tcp":{},8080/tcp":{},"443/tcp":{}}
评论区