MelonBlog

docker常用命令

启动镜像

搞清楚-i -t -d 可以参考: https://www.jerrymei.cn/docker-run-interactive-tty-detach

# options: -d|-p|-v|-i|-t|--name
#  -d:在后台运行容器,并且打印容器id -p:指定端口 -v:挂载一个目录 --name: 指定名称
#  -i: 即使没有attached,也要保持 STDIN 打开状态 -t:分配一个伪TTY
#  -it:创建完成之后直接进度终端(exit之后容器退出)
#  -id:创建完成后以后台运行容器(配合/bin/bash一起使用,相当常驻一个可交互终端,所以docker不会退出)
docker run $options $image:$tag $command $args
# 例子 🌰
# 启用容器,将容器命名为demo并进入容器
docker run -it --name demo demo:latest /bin/bash 
# 将8080端口映射到容器80端口,并后台启动
docker run -p 8080:80 -d demo:latest 
# 将当前目录下的conf目录映射到容器/etc/nginx/conf.d目录,并后台启动
docker run -v ./conf:/etc/ngxin/conf.d -d demo:latest 

进入已启动镜像

# options: -i|-t|-d (选项和run命令功能一致)
docker exec $options $container $command $args
# 例子 🌰
# 进入demo容器,并进入一个bash进程
docker exec -it demo /bin/bash 

构建镜像

# options: -t
#  -t:指定镜像名字和tag
docker build $options $dockerfile
# 例子 🌰
# 将当前目录下的Dockerfile文件构建成镜像
docker build -t demo:latest .

导入导出

docker save -o $file_name.tar $image_name:$version
docker load -i $file_name.tar
# 例子 🌰
docker save -o nextjs-docker.tar nextjs-docker:latest
docker load -i nextjs-docker.tar

移除镜像

# 批量移除tag为<none>的镜像
docker images -a | grep none | awk '{ print $3; }' | xargs docker rmi --force

Dockerfile

# 基于指定镜像构建新的镜像
FROM $image:$tag
# 构建新镜像过程中需要执行的指令
Run $command
# 复制文件到容器
Copy $local_file $container_file
# 类似Copy,可以自动解压归档文件, 并且可以添加远程文件
ADD $local_file $container_file 
# 声明容器运行时提供服务的端口,通过-P选项启动容器时,会自动映射
EXPOSE $port
# 可以被run命令的参数覆盖
CMD [$command] 
# 不可以被run命令的参数覆盖,适合作为启动命令 
ENTRYPOINT [$command] 
# 例子 🌰
FROM centos:7
RUN yum install -y epel-release \
    && yum -y update \
    && yum install -y nginx
EXPOSE 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]