Docker菜鸡级使用流程

1. 构造Dockerfile

一个实用的Dockerfile示例[1]

1
2
3
4
5
6
7
8
9
10
11
# FROM scratch											# 空白镜像
FROM ubuntu:22.04

RUN apt-get update && \ # 更新包信息
apt-get install -y gcc g++ make cmake && \ # 安装相关包
apt-get autoremove && apt-get clean autoclean && \ # apt清理包
rm -rf /var/lib/{apt,dpkg,cache,log} && \ # 删除缓存
rm -rf /var/tmp/* /tmp/* # 删除临时文件

EXPOSE 22
# 以上注释要删掉

2. 构造镜像

运行[2]

docker build -t [TAG_LIST] PATH

构造镜像,PATH即Dockerfile所在目录,并且打上TAG_LIST中所述标签。

3. 运行镜像

一种实用运行脚本[3]

#!/bin/bash -f
docker run -it --rm \						# 连接STDIO、容器停止后自动删除
	--runtime=nvidia \											# N卡直通
	--memory-reservation=16g \									# 内存限制(不一定靠谱)
	--name="ubuntu-22.04" \										# 设定容器名字
	-v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro \	# 映射本机用户账户
	-u $(id -u):$(id -g) \										# 映射本机用户账户
	-e QT_X11_NO_MITSHM=1 -e LANG=C.UTF-8 -e DISPLAY=$DISPLAY \
	-v $HOME:$HOME \											# 映射本账户home目录
	-v /home:/home:ro \
	-w $(pwd) \
	-p 50022:22 \												# 映射端口
	--hostname="docker" \										# 
	imagetag entry

4. 导出和导入镜像

导出镜像[4]

docker save TAG -o imagefile.tar

导入镜像[5]

docker load -i imagefile.tar

查看tar包的内容

1
tar -tvf imagefile.tar

5. 强制结束Docker容器

当Docker容器无法停止、无法删除、无法连接,且docker stopdocker kill等命令也无响应时:

强行移除容器:

docker rm -f CONTAINER_NAME

删除容器网络占用:

docker network disconnect --force bridge CONTAINER_NAME
docker network disconnect --force host CONTAINER_NAME

参考资料

  1. Dockerfile reference | Docker Documentation
  2. docker build | Docker Documentation
  3. docker run | Docker Documentation
  4. docker save | Docker Documentation
  5. docker load | Docker Documentation
  6. Build C++ Applications in a Linux Docker Container with Visual Studio - C++ Team Blog
  7. Docker — 从入门到实践
  8. 精简Docker镜像的几个方法