Loading

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 的情况下,会自动复制并解压到 <目标路径>

ADD的缺点:在不解压的前提下,无法复制 tar 压缩文件,会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢;具体是否使用,可以根据是否需要自动解压来决定;
 

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 <路径>

注:    

  • 在 Dockerfile 里设置 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

用于延迟构建命令的执行,也就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行;假设镜像为 test-build,当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的ONBUILD 指定的命令;
格式:ONBUILD <其它指令>为镜像添加触发器当一个镜像被其他镜像作为基础镜像时需要写上 OBNBUILD会在构建时插入触发器指令;

 

RUN

指定在当前镜像构建过程中需要运行的命令;

命令格式如下:

shell命令模式
RUN < command >
 
exec命令模式
RUN [ "executable" , "param1" , "param2" ]

  

ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTERYPOINT 指令指定的程序;
如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 entrypoint 指令指定的程序;
如果 Dockerfile 中 存在多个 ENTRYPOMIT 指令,仅最后一个生效
exec命令模式
ENTERYPOINT [ "executable" , "param1" , "param2" ]
shell命令模式
ENTERYPOINT  command

 

CMD

类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
  • 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 在容器里Nginx是以daemon方式启动,退出容器时,Nginx程序也会随着停止;   

解决方式:

  • 需要使用前台方式永久运行:/usr/local/nginx/sbin/nginx -g "daemon off;"

 

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]

   [https://www.imaginarycloud.com/blog/podman-vs-docker/]

posted @ 2021-04-03 00:42  街头卖艺的肖邦  阅读(116)  评论(0编辑  收藏  举报