1. Docker安装

参考docker-ce | 镜像站使用帮助 | 清华大学开源软件镜像站,可以使用https://gitee.com/kingdix10/envsetup下的工具脚本。

script function
debian_install_docker.sh 安装docker,使用tsinghua apt源
docker_conf_mirrors.sh 修改docker镜像源

1.1. 添加用户到docker组

安装docker需要添加用户到docker组,否则需要以root运行。

1adduser $username sudo
2adduser $username docker

2. Docker换源

国内源已经不能用了。

 1systemctl stop docker.service
 2
 3cat << EOF > /etc/docker/daemon.json
 4{
 5    "registry-mirrors": [
 6        "http://hub-mirror.c.163.com",
 7        "https://registry.docker-cn.com",
 8        "https://docker.mirrors.ustc.edu.cn"
 9    ]
10}
11EOF
12systemctl daemon-reload
13systemctl restart docker

3. 修改docker默认存储路径

docker镜像的默认存储路径是/var/lib/docker,这相当于直接挂载系统目录下,而一般在搭系统时,这个区都不会太大,所以如果长期使用docker开发应用,就需要把默认的路径更改到需要路径下或外挂存储

首先使用systemctl stop docker.service停止docker服务,完成下面任一操作后,执行systemctl daemon-reload; systemctl restart docker

查看docker的默认存储路径。

1dokcer info

Docker Root Dir: /data/docker

3.1. mount bind【推荐】

挂载一个新目录到这个路径。

1$ mkdir -p /data/docker
2$ mount -o bind /data/docker /var/lib/docker

如果要开机自动挂载,需要将其写到/etc/fstab中。

1$ echo "/data/docker /var/lib/docker none bind 0 0" >> /etc/fstab

相比于软链接的方式,使用mount bind不会删除原/var/lib/docker下的文件,只需要umount即可看到原/var/lib/docker下的文件。

相比于改docker.service文件的方式,mount bind不会随着docker升级而失效。

3.2. 软链接

删除默认路径,并创建软链接。

1$ rm -rf /var/lib/docker
2$ ln -s /data/docker /var/lib/docker

3.3. 修改docker.service文件

可能的文件路径如下:

1/usr/lib/systemd/system/docker.service
2/lib/systemd/system/docker.service

搜索containerd/containerd.sock,将其改为containerd/containerd.sock --graph=${img_path}

4. Docker内开启SSH server

方便VS Code远程连接,启动docker时需映射端口。

docker run时,-p参数指定端口,如-p :10022:22,或-p :20000-20010:20000-20010。端口映射范围不宜多大,否则会占用较大内存。

docker内.bashrc添加

1/etc/init.d/ssh status || sudo /etc/init.d/ssh restart

5. build镜像、启动docker容器

 1docker pull debian:stable-20230612
 2
 3cd mydebian
 4docker build -t mydebian:<tag> ./
 5
 6
 7# docker run -i --privileged --name=temp -h EEL -p 9022:22 -v /dev/shm:/dev/shm -v /storage/data:/data -t mydebian:<tag>
 8docker run -d --privileged  --name=new -h EEL -p 0.0.0.0:56092:22 -p 0.0.0.0:26000-26010:26000-26010 -v /dev/shm:/dev/shm -v /storage/data:/data -t mydebian:20230814
 9
10docker run -d --privileged  --name=new -h EEL -p :56092:22 -p :26000-26010:26000-26010 -v /dev/shm:/dev/shm -v /storage/data:/data -t mydebian:20230814
11
12
13docker run -i --privileged --name=temp -h EEL -v /storage/data:/data -t mydebian:<tag>
14
15docker exec -it temp bash
16
17# do something in docker
18
19docker commit temp      eel:<tag>
20docker tag    eel:tag  eel[:latest]
21
22docker stop   temp
23docker rm -f temp
24
25
26docker volume ls
27docker run -d --privileged --restart always --name=dev -h EEL -p :56092:22 -p :26000-26010:26000-26010 -v /dev/shm:/dev/shm -v f78e0fd6f219a74d7156dc0f8df8463b94bbce4f6cb5b622853daf29dea4f192:/home/dix -v /storage/data:/data -t eel
28
29# interactive
30docker run -i --privileged --restart=always --name=eel -h EEL -p 9022:22 -v /storage/data:/data -t eel:[tag]
31# deamon
32docker run -d --privileged --restart=always --name=eel -h EEL -p 9022:22 -v /storage/data:/data -t eel:[tag]

6. docker使用

 1# 登陆运行中的docker
 2docker exec -it temp bash
 3
 4# 查看信息
 5docker info
 6docker images
 7docker ps [-as]
 8docker system df
 9
10# 删除容器
11docker rm [-f] <container>
12# 删除所有容器
13docker rm $(docker ps -aq)
14# 按条件筛选之后删除容器
15docker rm $(docker ps -a | grep xxxxx | awk '{print $1}')
16
17# 删除镜像
18docker rmi [-f] <image>
19# 删除所有镜像
20docker rmi [-f] $(docker images -q)
21# 按条件筛选之后删除镜像
22docker rmi $(docker images | grep xxxxx | awk '{print $3}')