# Docker 常用命令

# 安装

  • 1、下载get-docker.sh文件
curl -fsSL get.docker.com -o get-docker.sh
1
  • 2、执行脚本,指定阿里云镜像库
sh get-docker.sh --mirror Aliyun
1
  • 3、启动docker服务
// 启动服务
systemctl start docker

// 停止docker 
systemctl stop docker

// 重启
systemctl restart docker

// 查看版本
docker -v

// 开机启动docker 
systemctl enable docker 
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 常用命令

// 下载镜像
docker pull 镜像

// 删除容器
docker rm 容器

// 删除镜像
docker rmi 镜像

// 查看容器详细信息
docker inspect 容器
    
// 进入容器
docker exec -it 容器 bash
docker exec -it 容器 /bin/bash
docker exec -it 容器 sh

// 查看日志
docker logs -f 容器

// 查看日志,仅显示最后100行
docker logs -f --tail=100 容器

// 容器互通
docker network ls
docker network rm share-net
docker network create share-net

docker run -it --name <容器名> --network <bridge> --network-alias <网络别名> <镜像名>

// 创建容器时,指定参数: ---network <bridge> --network-alias <网络别名>
docker run -it --name demo1 --network share-net --network-alias demo1-net -d demo1
docker run -it --name demo2 --network share-net --network-alias demo2-net -d demo2

// 在容器demo1里ping demo2-net能通

// 查看容器demo1的--network-alias参数值
docker inspect demo1 -> NetworkSettings -> Networks -> Aliases

// 容器中安装工具
apt-get update
apt-get install iputils-ping
apt-get install vim

// 查看镜像版本
docker image inspect nginx:latest | grep -i version

// 查看容器版本
docker inspect nginx | grep "VER" 
// 或者
docker inspect nginx | grep -i version

// 复制文件
// 将容器tomcat里的里test.js复制到宿主主机/opt目录下
docker cp tomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

// 复制文件夹
// 将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/

// 设置镜像加速
touch  /etc/docker/daemon.json
{"registry-mirrors":["https://reg-mirror.qiniu.com/","https://hub-mirror.c.163.com/"]}

// 重启/关闭所有容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker stop $(sudo docker ps -q)
docker start $(sudo docker ps -a -q)

// 动态修改运行中的容器的启动配置
docker update --restart=always redis

// 问题
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown
// 解决方案:
docker exec -it container-test /bin/bash
docker exec -it container-test /bin/sh
docker exec -it container-test /bin/csh

// 解决容器是apt-get update慢问题
// 1.进入容器

// 2.删除sources.list
mv /etc/apt/sources.list /etc/apt/sources.list.bak

// 3.重写sources.list内容
echo "deb http://mirrors.163.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib" >> /etc/apt/sources.list

// 容器中安装常用工具
// 更新
apt-get update
// 安装ping命令
apt-get install iputils-ping
// 安装vi命令
apt-get install vim

// 容器中设置时区、时间
// 修改时间:
echo "Asia/Shanghai" > /etc/timezone
// 修改时区:
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器:/etc/localtime

// 查找容器系统目录文件在宿主主机的路径,例如不进入容器直接修改容器里的文件内容
// 注:需要容器已启动
docker inspect nginx | grep "MergedDir"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113

# 备份与还原

// 以备份mysql为例:
// 1.根据容器创建镜像
docker commit -p mysql mysql-bak 
// 2.备份到本地
docker save -o mysql-bak.tar mysql-bak
// 3.迁移到目标主机
doocker load -i mysql-bak.tar
1
2
3
4
5
6
7

# Dockerfile

# 依赖的基础镜像
FROM openjdk:8-jdk-alpine

# 镜像的维护者和邮箱地址
MAINTAINER hweiyu<hwy_dod@163.com>

# 容器构建过程中,执行命令并创建新的镜像层
# 注意:多个 RUN 命令时,最好通过 && 进行合并操作,要不然,在 docker 构建时,每个 RUN 会生成一层,造成容器臃肿变大
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
   echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories && \
   apk update && \
   apk add --no-cache gcc libc-dev make openssl-dev pcre-dev zlib-dev linux-headers curl && \
   
# 挂载数据卷
VOLUME /data/upload_files

# 切换到工作目录,同cd命令:cd /usr/local/myapp
WORKDIR /usr/local/myapp

# 将宿主目录中的文件拷贝到镜像中
# ADD 不仅能复制宿主主机中的文件,还能是URL指向的文件。而且如果指向的文件是tar压缩包,在复制到容器后,会进行自动解压
# ADD ./spring-boot-demo.jar app.jar
# COPY 仅能复制宿主主机中的文件
COPY ./spring-boot-demo.jar app.jar

# 定义系统环境变量
ENV profile prod
ENV timezone Asia/Shanghai

# 容器启动时,需要运行的命令,shell格式:
# ENTRYPOINT java -jar -Dspring.profiles.active=$profile -Duser.timezone=$timezone app.jar
CMD java -jar -Dspring.profiles.active=$profile -Duser.timezone=$timezone app.jar

# 对外暴露的端口号
EXPOSE 80 443
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
上次更新: 7/20/2022, 4:12:37 PM