侧边栏壁纸
博主头像
一朵云的博客博主等级

拥抱生活,向阳而生。

  • 累计撰写 67 篇文章
  • 累计创建 25 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Docker -- 常用操作

一朵云
2021-12-08 / 0 评论 / 1 点赞 / 7641 阅读 / 8712 字

docker01.png

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

docker_ps.png

#2、停止docker。
systemctl stop docker.socket

docker_stop.png

#3、修改容器的配置文件config.v2.json
vim /var/lib/docker/containers/容器id/config.v2.json

docker_vim_config.png

#将下图中黄色标记的内容修改为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}

docker挂载配置内容.png

#4、修改容器的配置文件hostconfig.json
vim /var/lib/docker/containers/容器id/hostconfig.json

docker_vim_config2.png

#将下图中黄色标记的内容修改为static。
"/usr/docker/myNginx/static:/usr/share/nginx/static"

docker挂载内容2.png

#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

image.png

或者:

  
curl -I ip地址

image.png

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":{}}
1

评论区