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}')