Docker各种零散命令整理
Docker 环境搭建
- Docker所依赖的包环境
yum install -y yum-utils device-mapper-persistent-data lvm2
- 更新Docker yum源,并安装
- 方式一:下载阿里云Docker社区版 yum源
查看代码
[root@localhost ~] # cd /etc/yum.repos.d/
[root@localhost yum.repos.d] # wget http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
- 查看Docker安装包
查看代码
yum list | grep docker
- 方式二:添加Docker-ce 阿里源镜像
查看代码
yum-config-manager --add-repo http: //mirrors .aliyun.com /docker-ce/linux/centos/docker-ce .repo
- 如果使用yum-config-manager添加yum源,执行如下,更新yum软件包
查看代码
yum makecache fast
- 安装Docke-ce,默认安装最新版本
查看代码
yum -y install docker-ce
- 查看其它版本,之后使用yum install命令后面带版本号即可下载
查看代码
yum list docker-ce.x86_64 --showduplicates
注:阿里云Docker社区版yum源目前访问404,可使用Docker官方的脚本安装
curl -sSL https: //get .docker.com/ | sh
- 启动Docker
systemctl start docker.service
- 设置开机启动Docker
查看代码
systemctl enable docker
- 更新xfsprogs
yum -y update xfsprogs
- 设置镜像加速
阿里云镜像加速器配置地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,不过这个需要注册阿里云账号;
如果不想注册阿里云账号,可以使用中科大的加速器;[http://mirrors.ustc.edu.cn/help/dockerhub.html?highlight=docker]
设置完成后,执行以下命令重启Docker;
systemctl daemon-reload && systemctl restart docker
查看本地镜像
docker images
搜索镜像
docker search 镜像名
搜索镜像并过滤是官方的
docker search --filter "is-official=true" 镜像
搜索镜像并过滤大于多少颗星的
docker search --filter stars=stars数量 镜像名
下载镜像
docker pull 镜像名:tag
修改本地镜像名字(小写)
docker tag 旧镜像名 新镜像名
eg: docker tag centos:7 mycentos:1
本地镜像的删除
docker rmi IMAGE_ID
构建容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS:
-a: 指定标准输入输出内容类型,可选 STDIN /STDOUT/STDERR 三项
-d: 后台运行容器,并返回容器ID
-i: 以交互模式运行容器,通常与 -t 同时使用
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name= "" : 为容器指定一个名称
--dns: 指定容器使用的DNS服务器,默认和宿主一致
--dns-search: 指定容器DNS搜索域名,默认和宿主一致
-h "" : 指定容器的 hostname
-e: 设置环境变量
-- env - file =[]: 从指定文件读入环境变量
--cpuset= "0-2" or --cpuset= "0,1,2" : 绑定容器到指定CPU运行
-m :设置容器使用内存最大值
--net= "" : 指定容器的网络连接类型,支持 bridge /host/none/container : 四种类型
--link=[]: 添加链接到另一个容器
--expose=[]: 开放一个端口或一组端口
--volume , - v : 指定挂载路径
查看本地所有的容器
docker ps -a
查看本地正在运行的容器
docker ps
停止容器
docker stop CONTAINER_ID / CONTAINER_NAME
一次性停止所有容器
docker stop $(docker ps -a -q)
一次性启动所有容器
docker start $(docker ps -a -q)
启动容器
docker start CONTAINER_ID / CONTAINER_NAME
重启容器
docker restart CONTAINER_ID / CONTAINER_NAME
删除容器
docker rm CONTAINER_ID / CONTAINER_NAME
强制删除容器
docker rmi -f CONTAINER_ID / CONTAINER_NAME
查看容器详细信息
docker inspect CONTAINER_ID / CONTAINER_NAME
进入容器
docker exec -it CONTAINER_ID /bin/bash
注:路径需要绝对路径, ":"之间不能有空格
从宿主机复制到容器
docker cp 宿主机本地路径 容器名字/容器ID:容器路径
从容器复制到宿主机
docker cp 容器名字/容器ID:容器路径 宿主机本地路径
宿主机文件夹挂载到容器里(只能在构建时使用)
docker run -itd - v 宿主机路径:容器路径 镜像名:tag
参考:[https://docs.docker.com/engine/reference/commandline/run/]
Commit构建自定义镜像
构建镜像:
docker commit [-a "" ] [-m "" ] CONTAINER_ID IMAGE_NAME:tag
-a:标注作者
-m:说明注释
CONTAINER_ID:基于哪个容器的ID
Dockerfile
什么是Dockerfile?
Dockerfile是一个用于构建镜像的文本文件,文本内容包含一条条构建镜像所需要的指令和说明;基于Dockerfile构建镜像可以使用docker build命令,其中docker build命令使用-f可以指定具体的Dockerfile文件;
Dockerfile构建过程
从基础镜像运行一个容器执行一条指令,对容器做出修改,执行类似于docker commit的操作,提交一个新的镜像层,在基于刚提交的镜像运行一个新的容器,执行Dockerfile的下一条指令,直至所有指令执行完毕;
常用的Dockerfile指令
FROM
基础镜像,必须是可以下载下来的,定制的镜像都是基于 FROM 的镜像;
MAINTAINER
指定镜像的作者信息;
COPY
复制指令,从上下文目录中复制文件或目录到容器指定路径(只能用相对路径,不能用绝对路径);格式:COPY [--chown=<user>:<group>] <源路径 1>... <目标路径>;
ADD
ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY),在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>;
WORKDIR
指定工作目录;用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在(WORKDIR指定的工作目录,必须是提前创建好的,路径不存在会创建路径);docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层,只有通过 WORKDIR 创建的目录才会一直存在;格式:WORKDIR <工作目录路径>WORKDIR /path/to/workdir(填写绝对路径);
ENV
- 设置环境变量;
- 格式:[ENV <key> <value> ] [ENV <key>=<value>];
USER
- 用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在);
- 格式:USER <用户名>[:<用户组>];
LABEL
- LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式;
- 格式:LABEL <key>=<value>;
EXPOSE
- 用于声明端口作用,帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射在运行时使用随机端口映射,即在 docker run -P 时会自动随机映射 EXPOSE 的端口,这可以是一个或者多个端口,也可以指定多个EXPOSE;
- 格式:EXPOSE <端口> [<端口2>...]
HEALTHCHECK
用于指定某个程序或者指令来监控 docker 容器服务的运行状态;格式如下:
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令;
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令;
ARG
构建参数,与 ENV 作用一致,但作用域不一样,ARG 设置的环境变量仅对 Dockerfile 内有效,也就是只有在 docker build 的过程中有效,构建好的镜像内不存在此环境变量;构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖;格式:ARG <参数名>[=<默认值>];
VOLUME
定义匿名数据卷,在启动容器时忘记挂载数据卷,会自动挂载到匿名卷;
作用:1、避免重要的数据,因容器重启而丢失,这是非常致命的;2、避免容器不断变大;
格式:VOLUME ["<路径 1>", "<路径 2>"...]
VOLUME <路径>
注:
- docker run 的时候,用户可以通过 -v 参数修改挂载点 VOLUME [“/data”]; 启动容器
- 使用 --volumes-from 实现容器与容器之间volume共享;例子如下:
- 创建nginx1
docker run -itd -p 8080:80 - v /usr/local/nginx/html : /usr/local/nginx/html --name nginx1
mycentos:nginx /usr/local/nginx/sbin/nginx -g "daemon off;"
-
- 创建nginx2
docker run -itd -p 8081:80 --volumes-from nginx1 --name nginx2 mycentos:nginx
/usr/local/nginx/sbin/nginx -g "daemon off;"
-
- 创建nginx3
docker run -itd -p 8082:80 --volumes-from nginx1 --name nginx3 mycentos:nginx
/usr/local/nginx/sbin/nginx -g "daemon off;"
ONBUILD
RUN
指定在当前镜像构建过程中需要运行的命令;
命令格式如下:
shell命令模式
RUN < command >
exec命令模式
RUN [ "executable" , "param1" , "param2" ]
ENTRYPOINT
exec命令模式
ENTERYPOINT [ "executable" , "param1" , "param2" ]
shell命令模式
ENTERYPOINT command
CMD
- CMD 在 docker run 时运行
- RUN 是在 docker build 构建镜像时运行的,为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束,CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖;
注:ENTRYPOINT优先于CMD执行;
构建
docker build -t IMAGE_NAME:tag [dockerfile路径]
- IMAGE_NAME:新建的镜像名
- tag:新建镜像的tag
参考:[https://docs.docker.com/engine/reference/builder/]
Nginx镜像启动注意事项:
- /usr/local/nginx/sbin/nginx
Docker镜像过大
- 串联 Dockerfile 指令,在 Dockerfile 中, 每一条指令都会创建一个镜像层,会增加整体镜像的大小;合并多个指令串起来执行,Dockerfile 中的 RUN 指令通过 && 和 /支持将命令串联在一起,可以省不少镜像层;
- 选用更小的基础镜像,比如运行spring cloud项目,不必用jdk,直接选用jre镜像即可,可以节省50%的内存甚至更多;
docker-compose
docker compose是用于定义和运行多容器Docker应用程序的工具,通过Compose,可以使用yaml文件来配置应用程序需要的所有服务;
安装:
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
命令:
# 后台启动容器
docker-compose up -d
# 查看容器运行情况
docker-compose ps
# 停止并删除容器
docker-compose down
# 停止并删除容器并删除volume
docker-compose down --volumes
# 停止容器
docker-compose stop
# 启动容器
docker-compose start
# 重启容器
docker-compose restart
操作docker-compose一定要在配置文件docker-compose.yml文件路径下操作,格式一定要注意有空格;
阿里云镜像仓
Spring Boot应用打包docker镜像
关于CentOS8,Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
docker install docker
CentOS8默认按照podman,需要卸载podman后重新按照docker-ce,podman是无守护进程的,使用docker-compose会有问题,处理如下;
#卸载默认的podman
yum remove docker -y
#添加docker源
yum-config-manager --add-repo https: //download .docker.com /linux/centos/docker-ce .repo
#安装docker-ce
yum install docker-ce
注:卸载podman后,使用yum命令时出现Invalid configuration value: failovermethod=priority;
将 /etc/yum.repos.d/CentOS-Epel.repo文件中failovermethod=priority注释掉即可;
参考:[https://stackoverflow.com/questions/59359793/installed-docker-and-i-got-podman]