docker篇之docker命令

一、docker基础命令

1、其他指令
docker启/停/重启/查看状态
sudo systemctl start/stop/restart/status

查看当前安装的docker有关信息
docker info

2、镜像相关指令
查看已有镜像
docker images

在docker官网搜寻指定镜像
docker search 镜像

下载镜像(不加标签默认下载最新版本的镜像)
docker pull 镜像名字:tag(即标签)

保存已有镜像
docker save -o name.tar 镜像name:tag

加载镜像
docker load -i name.tar

镜像的删除(删除镜像前请删除所有与该镜像有关的容器)
docker rmi 镜像ID(或name:tag)

修改镜像name和tag
docker tag 镜像name 新镜像name:新tag

3、容器相关指令
启动容器(-d:后台运行;--name:指定容器名字;-p:映射容器端口到本机端口;-v:容器目录文件挂载至本机目录)
docker run -d --name 自定义容器name -p 本机端口:容器端口 -v 本机目录:容器目录 镜像ID(或name:tag)

进入正在运行的容器内部(-i:以交互模式运行容器;-t:为容器重新分配一个伪输入终端.通常it一起使用)
docker exec -it 容器name(或ID) /bin/bash

容器的启/停/重启/删除
docker start/stop/restart/rm 容器name(或ID)

查看容器端口映射
docker port 容器name(或ID)

查看容器信息
docker inspect 容器name(或ID)

查看正在运行的容器
docker ps

查看所有容器(包括正在运行的、停止的,不包括删除的)
docker ps -a

查看容器内的进程
docker top 容器name(或ID)

监控并显示最新100行的容器日志(可以直接使用docker logs容器name(或ID),但是日志容量大的最好加上条件)
docker logs -f --tail=100 容器name(或ID)

docker中 启动所有的容器命令

docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker中 关闭所有的容器命令

docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker中 删除所有的容器命令

docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
docker中 删除所有的镜像

docker rmi $(docker images | awk '{print $3}' |tail -n +2)

 

二、Dockerfile常用命令
FROM
指定基础镜像,Dockerfiel的第一条命令

格式:
  FROM <images>
  FROM <images>:<tag>

若使用第一种格式,则基础镜像的tag为latest

MAINTAINER
镜像维护者信息

格式:
MAINTAINER <name>

RUN
构建镜像时在镜像中运行的shell命令

格式:
RUN <command>
RUN ["executable", "param1", "param2"]

第一种格式(shell形式)默认使用/bin/sh -c 执行命令,推荐使用第一种格式
第二种格式(exec形式)使用exec执行命令

若想使用其他shell类型执行命令,请使用第二种格式即 RUN ["/bin/bash","-c","command"]

多条RUN命令可以合并,如:
RUN command1 \
&& command2 \
&& command3

ENV
设置镜像的环境变量

格式:
ENV <key> <value>
ENV <key>=<value> ...

第一种格式一次只能设置一个环境变量
第二种可以设置多个环境变量,若需换行使用反斜杠(\)

EXPOSE
设置启动镜像时要暴露的端口,用于与外界交互

格式:
EXPOSE <port> [<port1>...]


VOLUME
申明容器挂载点

格式:
VOLUME ["/path1/to/dir1","/path2/to/dir2"]

USER
指定启动镜像时运行用户

格式:
  USER <user>[:<usergroup>]
  USER <uid>[:<gid>]

使用用户之前请确保镜像中有该用户,创建用户可以 RUN groupadd -r 用户 && useradd -u uid -r -g 用户组 用户
使用USER指定用户后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户

WORKDIR 
设置进入容器的默认目录

格式:
WORKDIR </path/to/workdir>

ADD 
拷贝本地文件或目录到镜像中

格式:
ADD <src> <dest>
  ADD ["<src>", "<dest>"] 用于支持包含空格的路径

src是Dockerfile文件所在的同一级目录或者同级目录的子目录路径
tar类型的文件会自动解压到dest目录下

注意:
1.src是个文件,且dest以 / 结尾, 则docker会把dest当作目录,会把src文件拷贝到dest目录下。
如果dest不存在,则会自动创建
2.src是个文件,且dest不以 / 结尾,则docker会把dest当作文件,会把dest文件替换为src文件。
如果dest不存在,则创建名为src的文件
3.src是个目录,且dest不存在,则docker会自动以dest创建一个目录,把src目录下的文件拷贝进来。
如果dest是个已经存在的目录,则docker会把src目录下的文件拷贝到dest下

 

COPY
拷贝本地文件或目录到镜像中

格式:
  COPY <src> <dest>

与ADD功能相似,但是不能解压tar类型的文件

CMD
启动容器时执行的shell命令

格式:
CMD ["executable","param1","param2"] (exec形式执行可执行文件,优先)
CMD command param1 param2 (shell形式执行命令)

Dockerfile中只能有一条CMD命令,如果指定多条,只有最后一条生效,推荐使用第一种格式
第二种格式默认使用/bin/sh -c 执行命令
若要改变shell类型,请使用第一种格式即 CMD ["/bin/bash","-c","command","param1","param2"]
CMD会被docker run命令行指定的参数所覆盖 


ENTRYPOINT 
启动容器时执行的shell命令

格式:
ENTRYPOINT ["executable","param1","param2"] (exec形式执行可执行文件,优先)
ENTRYPOINT command param1 param2 (shell形式执行命令)

第二种格式默认使用/bin/sh -c 执行命令
Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效
同CMD类似,但是不会被docker run命令行指定的参数所覆盖,可以被docker run --entrypoint 覆盖
若Dockerfile中既有CMD(通常位置会在ENTRYPOINT之后)又有ENTRYPOINT,则CMD会被当做参数传递给ENTRYPOINT

 
ARG
构建镜像时,指定变量 

格式:
  ARG <name>
  ARG <name>=<default value>

第一种格式:变量值可以在docker build --build-arg name=value时指定 

 

二、制作镜像

1 制作镜像的基础命令:
  Dockerfile在当前目录下:
  docker build -t 镜像名:tag .

  Dockerfile不在当前目录下(-f 指定Dockerfile文件路径,xxx/为构建docker镜像时的上下文路径,即该目录下的文件可以在Dockerfile中COPY/ADD):
  docker build -t 镜像名:tag -f xx/Dockerfile xxx/


2 基于centos:7的tomcat8.5.53镜像制作

Dockerfile文件内容

#指定基础镜像
FROM centos:7

#指定运行的用户
USER root

#拷贝包到镜像指定目录
ADD jdk-8u241-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.53.tar.gz /app

#设置工作目录
WORKDIR /app/apache-tomcat-8.5.53

#设置环境变量
ENV JAVA_HOME=/usr/local/jdk1.8.0_241 \
JRE_HOME=/usr/local/jdk1.8.0_241/jre \
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
ENV PATH=${JAVA_HOME}/bin:${PATH}

#申明挂载点
VOLUME ["/app/apache-tomcat-8.5.53/log","/app/apache-tomcat-8.5.53/conf","/app/apache-tomcat-8.5.53/webapps"]

#暴露容器端口
EXPOSE 8080

#进入容器时启动tomcat
ENTRYPOINT ["bin/catalina.sh","run"]

 

posted @ 2021-08-25 14:20  菜鸟之家  阅读(484)  评论(0)    收藏  举报