wywwzjj's Blog.

Docker-常用命令清单

字数统计: 1.1k阅读时长: 5 min
2018/11/30 Share

基本概念

一个 Docker Registry 中可以包含多个 仓库(Repository)

每个仓库可以包含多个标签(Tag),每个标签对应一个镜像

镜像容器的关系,就像对象

安装

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
# 更新相关软件
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# 添加Docker源
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

sudo apt update
apt-cache policy docker-ce
# 下面是安装信息:
docker-ce:
Installed: (none)
Candidate: 18.06.1~ce~3-0~ubuntu
Version table:
18.06.1~ce~3-0~ubuntu 500
500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
18.06.0~ce~3-0~ubuntu 500
500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
18.03.1~ce~3-0~ubuntu 500
500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages

# 正式安装
sudo apt install docker-ce

# 查看运行状态
sudo systemctl status docker

基本使用

Docker也遵守Linux命令的格式

1
2
3
4
5
docker [option] [command] [arguments]

docker search ubuntu # 查找镜像
docker pull name # 下载image
docker push # 推送镜像
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
docker run -i -t IMAGE /bin/bash  # 启动交互式容器
docker inspect NAME # 查看详细信息?
docker run --name=xxx -it IMAGE /bin/bash # 以xxx为名字运行
# CTRL + p + q => 退出并后台运行
docker attach 容器名 # 恢复到后台容器,更建议使用 docker exec?

# 查看守护进程
ps -ef | grep docker
sudo status docker

docker top
docker exec [-d][-i][-t] nginx # 为运行中的容器启动新进程
docker logs
docker images #列出本地镜像
docker start CONTAINER #启动一个或多少已经被停止的容器
docker stop / kill CONTAINER #停止一个运行中的容器
docker restart CONTAINER #重启容器
docker rm CONTAINER #删除容器 -f 强制删除
docker rmi IMAGE #删除镜像
docker rmi $(docker images -q ubuntu) # 删除Ubuntu所有镜像
sudo systemctl daemon-reload #reload daemon.json
sudo systemctl restart docker #重启docker

docker info # 查看信息
docker diff 容器名 # 查看改动信息

# 端口映射
docker run -p 80 -it # -i 标准输入保持打开
docker run -p 8080:80 -it # -t 为docker分配一个伪终端(pseudo-tty),并绑定到容器的标准输入
docker run -p 0.0.0.0:80 -it

# 查看端口映射情况
docker port docker_name

# 容器快照?
# 导出容器
docker export ID > ubuntu.zip
# 导入容器
cat ubuntu.zip | docker import - test/ubuntu:v1.0
# 通过URL导入
docker import http://xxx example/imagesrepo
# 数据卷
docker volume create xxx
docker run -it -v ~/datavolume:/data:ro ubuntu /bin/bash # ro设置只读权限
# 数据卷容器
docker run -it --name dv --volumes-from dvt4 ubuntu /bin/bash


# 复制文件到容器中
docker cp xxx id:/dir
docker cp ./test apache:/var/www/
docker exec -it apache

部署实例

Nginx 部署流程

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
# 创建映射80端口的交互式容器
docker run -p 8080:80 --name web -it ubuntu /bin/bash
# 安装Nginx
apt update
apt install - y nginx
# 安装文本编辑器 vim
apt install -y vim
# 创建静态页面
cd /var/www/html
touch index.html
echo '<h1>Hello, Docker!</h1>' > index.html
# 修改Nginx配置文件
whereis nginx # 找到安装目录
vim /etc/nginx/sites-enabled/default # 修改 root 目录
# 运行Nginx
nginx
# 验证网站访问
curl IP:port # ip 可用宿主机的IP加映射端口,也可以用 docker inspect web 查看真实容器IP

# 停止容器
docker stop web

# 启动
docker start -i web # 此时会发现,nginx已经停止
docker exec web nginx
# 如果之前没有指定端口时,重新启动时 port 将发生变化

sqli-labs Docker

构建镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 通过容器构建
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
docker commit \
--author "Tao Wang <twang2218@gmail.com>" \
--message "修改了默认网页" \
webserver \
nginx:v2
# !慎用 docker commit

# 使用dockerfile构建镜像 —— 包括一系列命令的文件,类似shell脚本?
dockerfile编写语法
# 注释

docker build # 构建镜像

优化体验

配置 Docker 加速器

1
2
3
4
5
6
7
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
sudo systemctl restart docker.service # 重启 Docker 生效

docker info
# 包含以下信息,加速器配置成功
Registry Mirrors:
http://f1361db2.m.daocloud.io/

Docker不使用sudo

将用户添加到 docker 用户组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo usermod -aG docker $USER  # 先试这个

cat /etc/group | grep docker # 查找 docker 组,确认其是否存在
groups # 列出自己的用户组,确认自己在不在 docker 组中

# 如果 docker 组不存在,则添加之:
sudo groupadd docker

# 将当前用户添加到 docker 组
sudo gpasswd -a ${USER} docker

# 重启服务
sudo service docker restart

# 切换一下用户组(刷新缓存)
newgrp - docker;
newgrp - `groups ${USER} | cut -d' ' -f1`; # TODO:必须逐行执行,不知道为什么,批量执行时第二条不会生效
# 或者,注销并重新登录
pkill X
CATALOG
  1. 1. 基本概念
  2. 2. 安装
  3. 3. 基本使用
  4. 4. 部署实例
  5. 5. 构建镜像
  6. 6. 优化体验