Skip to content

常用命令

团队

Docker镜像/容器

Docker

  • 启动Dockersudo service start dockersystemctl start docker

  • 开启自启动: sudo systemctl start docker

  • 停止Docker:sudo service docker stopsystemctl stop docker

  • 关闭自启动: sudo systemctl stop docker

  • 重启Docker:sudo service restart dockersystemctl restart docker

  • 设置Docker自启:sudo service enable dockersystemctl enable docker

  • 查询Docker版本:docker --versionsystemctl status docker

  • 查询Docker信息:docker info

  • kill 容器: docker kill 容器ID/容器名

  • 查看完整信息: docker ps -a --no-trunc

  • 复制文件/文件夹(本地到容器): docker cp /root/app.jar 镜像名/镜像ID:/datart/lib/

  • 复制文件/文件夹(容器到本地): docker cp 镜像名/镜像ID:/datart/lib/app.jar /root/

Image

  • 搜索镜像

Docker官网搜索镜像

bash
docker search 镜像名 

docker search --filter=STARS=9000 mysql 搜索 STARS >9000的 mysql 镜像
  • 列出当前系统存在的镜像:docker images

  • 拉取镜像:docker pull xxx

  • xxx是具体某个镜像名称(格式 REPOSITORY:TAG)

  • REPOSITORY:表示镜像的仓库源,TAG:镜像的标签

  • 拉取镜像

不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本

bash
docker pull 镜像名  

docker pull 镜像名:tag

docker pull mysql:5.7

🔰 温馨提醒:

建一个新的容器但不启动: docker create --name xxxx nginx:latest

杀掉一个运行中的容器:docker kill image|ID

删除单个镜像:docker rmi -f 镜像名/镜像ID

删除多个镜像ID或镜像用用空格隔开即可:docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID

删除全部镜像-a 意思为显示全部, -q 意思为只显示ID:docker rmi -f $(docker images -aq)

强制删除镜像:docker image rm 镜像名称/镜像ID

保存镜像,将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像

bash
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字

docker save tomcat -o /myimg.tar

按照条件批量删除镜像

  • 删除无标签镜像(即 TAG 为 none 的镜像 dangling image)
bash
docker rmi $(docker images -q -f dangling=true)
  • 删除包含某关键字的镜像
bash
docker rmi --force `docker images | grep test-api | awk '{print $3}'` //其中test-api为关键字

运行一个镜像到容器

bash
# docker run 镜像名:Tag
docker run --name nginx-xd -p 8080:80 -d nginx

# 【自启动】运行run命令时 添加参数`--restart=always` 便表示,该容器随docker服务启动而自动启动
# -it 表示 与容器进行交互式启动 ,最后追加 /bin/bash  交互路径
# -d 表示可后台运行容器 (守护式运行)  
# --name 给要运行的容器 起的名字  

# docker run - 运行一个容器
#      --restart=always
#      -it 容器进行交互式启动,最后追加 /bin/bash  交互路径
#      -d 后台运行
#      -p 宿主机端口:容器端口
#      -v 参数 来实现 宿主目录与虚拟机目录进行挂载映射
#      --name "xxx"  容器名/容器ID

docker run --restart=always -it -d -p 8080:8080 --name 要取的别名 -v /test:/data 镜像名:Tag /bin/bash

img

  • 移除某个容器: docker rm 容器名/容器ID (容器必须是停止状态)

  • 删除镜像:docker rmi 容器名/容器ID

  • 强制删除一个镜像(不管是否有容器使用该镜像):docker rmi -f 镜像名/镜像ID

  • 列举当前运行的容器:docker ps

  • 检查容器内部信息:docker inspect 容器名/容器ID

  • 停止某个容器:docker stop 容器名/容器ID

  • 启动某个容器:docker start 容器名/容器ID

  • 列举全部 容器 : docker ps -a

  • 查看容器启动日志 : docker logs -f containerid

  • 全部容器: docker ps -a

进入容器

docker exec -it IMAGE /bin/bash

时如果使用了精简版,只装了sh命令,未安装bash。

docker exec -it IMAGE /bin/sh

小拓展

  • Shell简介,Shell是一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
  • sh(Bourne Shell)是一个早期的重要shell,1978年由史蒂夫·伯恩编写,并同Version 7 Unix一起发布。
  • bash(Bourne-Again Shell)是一个为GNU计划编写的Unix shell。1987年由布莱恩·福克斯创造。主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。
  • #! 是一个特殊标记,说明这是一个可执行的脚本。除了第一行,其他以#开头的都不再生效,为注释。
  • #! 后面是脚本的解释器程序路径。这个程序可以是shell,程序语言或者其他通用程序,常用的是bash、sh。
bash
#!/bin/bash
#!/bin/sh
  • 查看系统可使用的shell类型

cat /etc/shells

img

退出容器

  • 直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭

exit

  • 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭

Ctrl + p + q

挂载映射

在run 镜像的时候 使用-v 参数 来实现 宿主目录与虚拟机目录进行挂载映射

拉取镜像:docker pull redis

例如 启动一个redis 镜像 设置端口映射 设置别名为aa

docker run -d -p 6888:6379 --name aaa -v /test:/data redis 发现咱们的宿主机 /test 目录已经与 aaa 容器 /data 目录挂载起来了

img

首先我们进入宿主机 新建 aaa.txt

mkdir aaa.txt

然后进入docker aaa容器 查看是否也有 aaa.txt

docker exec -it aaa /bin/bash

img

退出容器:Ctrl+p+q

最后 我们在docker 容器 aaa 中新建一个文件,看宿主机是否同步到

img

进入容器,追加数据,查看宿主机是否同步到数据

docker exec -it aaa /bin/bash

echo "aaaaaaaaa" >> bbb.file

cat bbb.file

img

重要

  1. 容器关闭停止,也同步数据
  2. 删除文件,也将同步删除

容器删除宿主机外部挂载的目录不会同步

扩展删除容器的数据,宿主机数据文件依旧存在

整个容器删除 数据不会同步 意思是 不会因为容器的删除 而删除其挂载在外部宿主机的目录

Dockerfile

一系列命令和参数构成的脚本,这些命令应用于基础镜像, 最终创建一个新的镜像

bash
#基础镜像,一切从这里开始构建
FROM
#镜像是谁写的,姓名+邮箱
MAINTAINER
#镜像构建的时候需要运行的命令
RUN
#步骤,tomcat镜像,这个tomcat的压缩包!添加内容
ADD
#镜像的工作目录
WORKDIR
#挂载的目录
VOLUME
#暴露端口配置 
EXPOSE
#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
CMD
#指定这个容器启动的时候要运行的命令,可以追加命令
ENTRYPOINT
#指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD
#当构建一个被继承 Dockerfile 这个时候就会运行ONBUILD 的指令
COPY
#类似ADD,将我们文件拷贝到镜像中
ENV
#构建的时候设置环境遍量

扩展

bash
FROM <image>:<tag> 需要一个基础镜像,可以是公共的或者是私有的,
后续构建会基于此镜像,如果同一个Dockerfile中建立多个镜像时,可以使用多个FROM指令
      
VOLUME  配置一个具有持久化功能的目录,主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。
/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录 

ARG  设置编译镜像时加入的参数, JAR_FILE 是设置容器的环境变量(maven里面配置的)
COPY : 只支持将本地文件复制到容器 ,还有个ADD更强大但复杂点
ENTRYPOINT 容器启动时执行的命令

EXPOSE 8080 暴露镜像端口

Dockerfile 同路径新建 script/fonts/ 文件夹 放置需要用到的字体

bash
# 拉取最小化的jre 1.8的运行环境(没有字体资源需求可以考虑切换这个)
#FROM anapsix/alpine-java:8_server-jre_unlimited

FROM openjdk:8-jdk-alpine
#设置语言包为中文
ENV LANG C.UTF-8
#指定容器时间
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 镜像作者信息
MAINTAINER XiJue
LABEL description="陕西品创网络科技模块化系统(Shaanxi Pinchuang network technology content management system)"
#captcher 字体包
RUN set -xe \
&& apk --no-cache add ttf-dejavu fontconfig
# 拷贝字体 本地路径 ./script/fonts文件夹下面准备好字体
COPY script/fonts/msyh.ttc /usr/share/fonts/ttf-dejavu/msyh.ttc
COPY script/fonts/msyhbd.ttc /usr/share/fonts/ttf-dejavu/msyhbd.ttc
COPY script/fonts/msyhl.ttc /usr/share/fonts/ttf-dejavu/msyhl.ttc
# 创建文件夹
RUN mkdir -p /sxpcwlkj
RUN mkdir -p /sxpcwlkj/cms
RUN mkdir -p /sxpcwlkj/cms/logs
RUN mkdir -p /sxpcwlkj/cms/files
RUN mkdir -p /sxpcwlkj/cms/theme
# 切换到该文件夹下指定当前工作目录,jar的执行路径
WORKDIR /
# 设置环境变量
ENV SERVER_PORT=8082
# 告诉Docker服务端暴露端口,在容器启动时需要通过 -p 做端口映射
EXPOSE ${SERVER_PORT}
# 将jar包复制到Dockerfile所在的相对目录下目录下,可以是URL,也可以是tar.gz(自动解压);(当使用本地目录为源目录时,推荐使用 COPY)
# ADD是复制指定路径到容器路径,COPY是复制本地主机的路径到容器的路径。
ADD ./target/cms.jar ./app.jar
# 启动时执行的命令,要追加任何命令可以直接在 [ ] 数组中追加任何参数,但是要保证排序正确
# ENTRYPOINT ["java", "-Xmx512m","-Xms512m","-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dserver.port=${SERVER_PORT}", "-jar", "app.jar"]

Dockerfile制作镜像

  • Dockerfile: ADD ./target/cms.jar ./app.jar 注意Dockerfile jar的位置是否存在

  • 语法 docker build -t web-test .

后面有点 . 哦, web-test 为镜像名

执行 Successfully built 为成功

bash
[root@docker springBoot-docker]# docker build -t web-test .
Sending build context to Docker daemon  17.61MB
Step 1/4 : From java:8
 ---> d23bdf5b1b1b
Step 2/4 : COPY *.jar /app/web.jar
 ---> 842a89197b40
Step 3/4 : CMD ["echo","success---build"]
 ---> Running in 44a3ff5d4325
Removing intermediate container 44a3ff5d4325
 ---> c9f19fd96561
Step 4/4 : ENTRYPOINT ["java","-jar","/app/web.jar"]
 ---> Running in 1b5bece20c7f
Removing intermediate container 1b5bece20c7f
 ---> 024d6444c366
Successfully built 024d6444c366
Successfully tagged web-test:latest

因为我们的dockerfile文件名为Dockerfile,所以不用 -f 指定dockerfile文件名,系统会自动识别当前目录下名为Dockerfile 的文件。

  • -t:镜像名 web-test

  • 指镜像构建时打包上传到Docker引擎中的文件的目录,当构建的时候,由用户指定构建镜像的上下文路径,而 docker build 会将这个路径下所有的文件都打包上传给 Docker 引擎,引擎内将这些内容展开后,就能获取到所有指定上下文中的文件了。

  • 注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

  • 查看镜像列表:docker images

镜像上传到仓库

1 页面上传

打包成镜像文件:docker save xxx_test:v1 > test.tar

云镜像仓库页面上传镜像文件

2 docker客户端上传

参照云镜像仓库的说明,通常是三步:

  • 登录到仓库,

  • 给镜像打标签(包含仓库位置/组名/镜像:版本),

  • 推送到仓库

Docker-Compose

  • Docker Compose 是一个简化多容器 Docker 应用程序管理的工具,它通过使用一个配置文件来定义和管理多个容器的运行方式,使得应用程序的部署和管理变得更加简单和高效。

  • Docker-Compose 将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose 运行目录下的所有文件(docker-compose.yml,extends 文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。

  • Docker-Compose 的工程配置文件默认为 docker-compose.yml,可通过环境变量 COMPOSE_FILE 或 -f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。 使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。

  • 查看 docker-compose 版本: docker-compose --version

  • docker-compose 卸载: rm /usr/local/bin/docker-composepip uninstall docker-compose

  • 根据指定的配置文件(默认为 docker-compose.yml)创建并运行多个容器: docker compose up [OPTIONS] [SERVICE...]

参数说明
-d在后台运行服务容器
–no-color不使用颜色来区分不同的服务的控制输出
–no-deps不启动服务所链接的容器
–force-recreate强制重新创建容器,不能与 –no-recreate 同时使用
–no-recreate如果容器已经存在,则不重新创建,不能与 –force-recreate 同时使用
–no-build不自动构建缺失的服务镜像
–build在启动容器前构建服务镜像
–abort-on-container-exit停止所有容器,如果任何一个容器被停止,不能与-d同时使用
-t,-–timeout int停止容器时候的超时(默认为 10 秒)
–remove-orphans删除服务中没有在 compose 文件中定义的容器
-f指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定

例如:

必须是在docker-compose.yml文件根目录下执行以下命令,要不然会报错找不到 Docker Compose 的配置文件

bash
# 启动所有服务
docker-compose up

# 在后台启动所有服务
docker-compose up -d

# 在后台所有启动服务,指定编排文件
docker-compose -f docker-compose.yml up -d

docker-compose.yml

yml
  # yaml 配置实例
  version: '3'
  # 品创网络-官网
  official:
    image: sxpcwlkj/official:1.0.0
    container_name: official
    environment:
      # 时区上海
      TZ: Asia/Shanghai
    volumes:
      # 配置文件
      - /docker/sxpcwlkj/official/logs/:/sxpcwlkj/official/logs
      - /docker/sxpcwlkj/official/files/:/sxpcwlkj/official/files
    privileged: true
    network_mode: "host"
  • 在后台所有启动服务,指定编排文件docker-compose -f docker-compose.yml up -d

容器日志

  • 全部日志:docker logsdocker-compose logs

  • 某个容器日志:docker logs [name|ID]docker-compose logs [name|ID]

  • 某个容器日志并显示时间、持续打印docker logs -t -f [name|ID]docker-compose logs -t -f [name|ID]

  • 最后300行日志:dicker logs [name|ID] | tail -n 300docker-compose logs [name|ID] | tail -n 300

Released under the MIT License.