docker常用操作
Easul Lv6

docker基本概念

  • docker是一种容器,用于实现虚拟化,且容器之间不会相互有接口(沙箱机制),性能开销低
  • docker的三个概念
    • 镜像(Image): 相当于一个root文件系统
    • 容器(Container): 镜像是静态的,容器是镜像运行时的实体(类似类与实例).容器可以被创建,启动,停止,删除,暂停.
    • 仓库(Repository): 相当于代码控制中心,用来保存镜像

docker的安装

可以参考这篇在deepin安装docker的文章

docker拉取centos

可以参考这篇对于centos7拉取的文章

centos镜像设置免密登录

可参考这篇文章

docker常用命令

BASH
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
# 运行容器,这样会自动进入命令行模式
# --name 给容器的命名
# -p 实现端口的映射
# -v 挂载容器的目录到本地目录
# -d 以守护进程运行
# -t 在容器内指定一个伪终端或终端
# -i 可以与容器进行输入输出交流
# --restart=always 指定容器在docker启动的时候自启动
# tomcat:9.0.36 镜像:版本号
docker run --name mytomcat -p 8082:8080 -v $PWD/mytest:/usr/local/tomcat/webapps/ROOT/ -it /bin/bash -d tomcat:9.0.36
# 查看运行容器,容器状态有
# created(已创建)
# restarting(重启中)
# running 或 Up(运行中)
# removing(迁移中)
# paused(暂停)
# exited(停止)
# dead(死亡)
#
docker ps
# 查看所有容器
docker ps -a
# 查看容器的标准输出
docker logs mytomcat
# 停止容器
docker stop mytomcat
# 更新容器启动参数,这里为容器添加了自启动参数
docker update --restart=always mytomcat
# 查看容器的详细参数
docker inspect mytomcat
# 用bash打开容器
# 通过-it指定使用容器的终端进行交互
docker exec -it mytomcat /bin/bash
# 删除容器
docker rm -f 容器名
# 导出容器(导出后再导入可能无法运行,因为找不到运行命令)
docker export 容器名 > test.tar
# 导入容器,可修改镜像名(导出后再导入可能无法运行)
docker import 容器名.tar 新镜像名:版本
# 主机目录拷贝到容器目录
docker cp /www/runoob 96f7f14e99ab:/www/
# 主机目录拷贝到容器目录并改名
docker cp /www/runoob 96f7f14e99ab:/www
# 容器目录拷贝到主机目录
docker cp 96f7f14e99ab:/www /tmp/
# 暂停容器
docker pause mytomcat
# 恢复容器
docker unpause mytomcat
# 容器a404c6c174a2保存为新的镜像
# -a 提交者
# -m 提交说明
# -p commit时暂停容器
docker commit -a "easul" -m "new file" a404c6c174a2 easul/tomcat:v1
# 将镜像easul/tomcat:v3归档文件到mytomcat.tar(导入无法修改镜像名)
docker save -o mytomcat.tar easul/tomcat:v3
# 将归档文件mytomcat.tar恢复为镜像easul/tomcat:v3(导入无法修改镜像名)
docker load -i mytomcat.tar
# 查看本地镜像
docker images
# 搜索镜像
docker search tomcat
# 拉取镜像
docker pull tomcat:9.0.36
# 删除镜像
docker rmi -f 镜像名

参考菜鸟教程
基础实例
常用命令

docker容器修改端口信息

BASH
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
# 停止容器
docker stop container_id
# 停止docker及其socket
sudo systemctl stop docker
sudo systemctl stop docker.socket
# 修改配置文件,
sudo vim /var/lib/docker/containers/[containerId]/hostconfig.json

# hostconfig.json的键PortBindings配置如下
# 22是容器端口,5022是本地端口
"PortBindings":{
"22/tcp":[{
"HostIp":"",
"HostPort":"5022"
}]
}

# 修改另一个配置文件,
sudo vim /var/lib/docker/containers/[containerId]/config.v2.json

# Config键的AttachStderr键下添加下边的配置
"AttachStderr": false,
"ExposedPorts":{
"22/tcp":{}
}
# 然后配置Ports项
"Ports": {
"22/tcp": [{
"HostIp": "0.0.0.0",
"HostPort": "5022"
}]
}

# 保存并重启docker即可看到效果
sudo systemctl start docker
docker ps -a

参考

docker compose相关

配置文件解释

文件需要命名为docker-compose.yaml

YAML
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
version: '在单引号中指定该 docker-compose.yaml 的版本'

services: 指定相关容器信息
etcd: 指定 etcd 这个容器的信息。这个名称可以自己定义
container_name: 指定在 docker 中显示的容器名
image: 指定拉取的容器镜像名称
environment: 指定运行时的环境变量
- 环境变量1=值1
- 环境变量2=值2
volumes: 指定挂载的卷的信息
- docker外部挂载卷的位置:docker内部挂载卷的位置
ports: 指定容器内外映射的端口
- "容器外的端口:容器内的端口"
command: 容器运行时的启动命令
healthcheck: 用于检查容器是否健康
# 检查支持三种类型: CMD-SHELL,CMD,NONE。什么都不写,默认为NONE
# CMD-SHELL 表示在容器的shell中执行命令
# CMD 表示直接在容器中执行命令
# NONE 表示不执行命令
# 命令返回0,则正常,返回非0,则不健康。
# 参考的格式
# test: ["CMD-SHELL", "curl -f http://localhost:80/ || exit 1"]
# test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
test: 指定了健康检查的命令和参数。
interval: 指定了健康检查的间隔时间
timeout: 指定了健康检查的超时时间
retries: 健康检查失败后重试的次数
depends_on: 指定依赖的容器名
- "etcd"
networks: 用于定义网络的配置
default: 用于定义默认的网络配置信息
name: 网络的名称

样例配置

YAML
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
version: '3.5'

services:
etcd:
container_name: milvus-etcd
image: quay.io/coreos/etcd:v3.5.5
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
- ETCD_SNAPSHOT_COUNT=50000
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd

minio:
container_name: milvus-minio
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
command: minio server /minio_data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3

standalone:
container_name: milvus-standalone
image: milvusdb/milvus:v2.2.10
command: ["milvus", "run", "standalone"]
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
ports:
- "19530:19530"
- "9091:9091"
depends_on:
- "etcd"
- "minio"

networks:
default:
name: milvus
 评论
Powered By Valine
v1.5.2