Docker常用命令汇总

镜像

远程镜像

1
2
3
4
5
# 检索
docker search

# 拉取镜像到本地
docker pull name:tag

本地镜像

1
2
3
4
5
# 查看所有镜像
docker images

# 删除
docker image rm name

网络

1
2
3
4
5
6
7
8
# 创建
docker network create --subnet=192.168.3.1/24 mynetwork

# 查看网络
docker network ls

# 删除
docker network rm name / prune

容器

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
# 一个比较完整的运行容器的命令
docker run --name mysql \
-p 3306:3306 \
-v /data/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-itd \
--net mynetwork --ip 192.168.3.1 \
mysql:5.7

# -name:指定运行的容器名
# -v:代表文件映射,前面是宿主机目录,后面是虚拟机目录
# -p:代表端口映射,这样可以直接通过本机ip进行连接
# -itd:分别是交互式、分配一个终端、后台运行(后台运行时,可以不添加-t参数)

# 登录容器的终端
docker exec -it mysql /bin/bash

# 登录终端,exit之后会stop容器服务
docker attach mysql

# rm参数可以在退出的时候直接删除容器。

# 没有rm参数的时候,run的结果会生成一个记录(docker ps -a进行查看)
# 后续我们可以通过docker start|stop name等命令来直接进行启动
# 同时也没法再run相同名称的容器

# 添加了rm参数之后stop会清除记录,可以再次运行run相同名称的容器,相当于手动执行了docker rm name
docker run --rm ...

# 启动后可以查看正在运行的进程,-a是包括已退出的所有进程
docker ps / ps -a

# run之后可以这样进行维护
docker start|stop|restart mysql

# 可以查看错误日志
docker logs mysql

# 删除
docker rm mysql

# 查看容器ip
docker inspect name | grep IPAddress

版本控制

1
2
3
4
5
6
7
8
9
10
11
# 本地先提交一个镜像
docker commit oldname newname:tag

# 登录远程仓库
docker login url

# 打标签
docker tag local:tag url:name:tag

# 推送
docker push url:name:tag

Dockerfile

在一个空目录下创建Dockerfile文件,添加如下内容,依赖官方的centos镜像添加ssh服务、go环境和自启动脚本

1
2
3
4
5
6
7
8
9
FROM centos:centos6

RUN yum -y install openssh-server wget \
&& wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz \
&& tar -C /usr/local -xzvf go1.13.4.linux-amd64.tar.gz \
&& echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc \
&& echo -e "service sshd start\n/bin/bash" > /start.sh

CMD ["/bin/bash", "/start.sh"]

切换到Dockerfile目录,执行构建命令

1
docker build -t name:tag .

2019-12-06 update

运行shell命令

1
2
# 运行ls命令,并将输出显示的宿主机上
docker exec -t name bash -c "ls"

连接容器除了exec还可以用如下命令

1
docker attach name/id

attachexec不同的是执行了exit也会停止容器的运行。如果不想停止运行可以使用默认的快捷键ctrl-p ctrl-q来退出。

但是上面的快捷键使用了ctrl-p,所以会导致docker容器内的终端ctrl-p的行为很怪异,因为通常情况下这个快捷键是用来翻命令历史的。

解决办法是在docker的配置文件,通常是~/.docker/config.json,添加如下内容,也就是把原来的快捷键替换为ctrl-@

1
2
3
{
"detachKeys": "ctrl-@"
}

然后重启容器即可。

不定期更新……