第一章:使用jar包制作镜像

1.使用Dockerfile制作镜像

Dockerfile的指令是忽略大小写的,不过建议使用大写。每一行只支持一跳指令,用’#’作为注释。
Dockerfile的指令根据作用分两种,构建指令和设置指令。构建指令用户构建image,设置指令用于设置image的属性,将会在容器中得到执行。

构建指令,必须指定,且后续指令依赖该指令
FROM jdk8:8u301
# 构建指令,记录维护者信息
# MAINTAINER admin “admin@qq.com”
# 设置指令,相当于cd命令,对RUN、CMD、ENTRYPOINT生效
WORKDIR /data
# 构建指令,所有拷贝到container中的文件和文件夹,赋755权限
ADD patrol-station.jar /data/patrol-station.jar
# 设置指令,该指令将容器中端口映射成宿主机的某个端口(可以指定多个)
# EXPOSE 8090
# 设置指令,用于container启动时指定的操作。可以使自定义脚本,也可以是执行系统命令
CMD java -jar /data/patrol-station.jar —spring.profiles.active=prod
# 开启远程调试模式
#CMD java -jar -Xdebug -Xrunjdwp:transport=dt_socket,address=30010,server=y,suspend=n /data/patrol-station.jar —spring.profiles.active=prod

根据Dockerfile进行编译进项,需要提供项目的jar包。
docker build -t patrol-station:latest . # 通过-t指定容器的标签(当前目录下执行)
docker build -f /usr/local/Dockfile . # 通过-f 指定文件位置(当前目录下执行)

第二章:持久化Docker镜像或容器

在多个docker环境下,将容器进行转存;或者将测试环境中验证过得容器,发至生产环境。在这个过程中需要对镜像进行转存。需要将镜像进行导入和导出。Docker为导入和导出提供了两种方式:

2.1 docker save 和docker load

1. docker save 命令
a) 语法:
docker save -o images.tar mysql:5.7
docker save -o images.tar mysql

b) 说明
上面两条命令,第一条是通过(镜像:版本)的方式进行保存的;第二条命令则通过容器名称导出,docker save 即使跟的是容器,最终保存的容器对应的镜像。
docker save 是可以将一个或者多个image进行打包保存的工具。

2. docker load命令
a) 语法:
docker load -i images.tar

b) 说明
通过将镜像进行导入,如果原来本地仓库已经有了这两个镜像,则将会被覆盖。

2.2 docker export 和docker import

1. docker export命令
a) 语法:
docker export -o mysql_export.tar mysql

b) 说明
docker export必须指定container。
docker export 一般用来制作基础镜像。

2. docker import命令
a) 语法:
docker import mysql_export.tar mysql:latest
b) 说明
docker import将container导入称为一个镜像;可以再docker image的时候指定IMAGE[:TAG],将他设置为 一个新的镜像。

第三章:容器的运行

3.1命令直接启动

启动portainer容器
docker run -d -p 9000:9000 —restart=always —name portainer \
-v “/var/run/docker.sock:/var/run/docker.sock” \
-v /usr/local/qif/docker/portainer/portainer_data:/data \
-v /usr/local/qif/docker/portainer/public:/public
portainer/portainer:1.24.2

说明:
1. -d:后台启动
2. -p:指定端口
3. —restart=always:开机自启
4. —name:给容器命名
5. -v:可以做文件夹的映射
6. public/:文件夹是portainer的汉化包的静态文件
7. 特殊说明:对于/var/run/docker.sock的映射,不管对于portainer本地管理还是在容器中也能执行docker管理命令都需要。
这种方式,开发测试可行,现场运维就显得繁琐

3.2 docker compose 启动

docker-compose是用于定义和运行多容器Docker应用的工具,可以通过compose,使用yml文件配置应用所有服务。
version: ‘2’
services:
patrol-station:
image: patrol-station:v1
container_name: patrol-station
# 现场部署使用时,删除下面这行(build: .)和这行注释
# build: .
restart: always
mem_limit: 4096m
memswap_limit: 4096m
ports:
- 10010:10010
- 21000:21000
- 20020:20020
- 30010:30010
volumes:
- /usr/local/qif/dsa5200/javaconfig/application.properties:/data/config/application.properties
- /usr/local/qif/dsa5200/patrol-station/logs:/usr/local/dsa5200/filedata/logs
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- TZ=Asia/Shanghai
- java.awt.headless=true
networks:
- custom_net
networks:
custom_net:
external:
name: dsa5200_network

说明:
1. version:指定本yml依从的compose哪个版本指定
2. build用来指定构建镜像上下文路径;一般不用Dockerfile已经指定
3. volumes: 作为文件/文件夹映射
4. environment:添加的环境变量(比如时区、允许服务器没有输入、输出设备)

启动命令:
docker-compose up -d —build

使用docker-compose的方式,可以在portainer平台的堆栈模块中,可以更加便捷的管理container。

第四章: 镜像和容器管理

4.1 镜像管理

1. 查看容器的镜像
docker images
image.png
说明:
REPOSITORY: 表示镜像的仓库源
TAG:镜像标签
IMAGE ID:镜像ID

2. 容器的删除
docker rmi 镜像ID \ 镜像名称 # 删除指定镜像,镜像所启动的容器没有关闭,将无法删除
docker rmi -f 镜像ID \ 镜像名称 # 强制删除

4.2 容器管理

1. 查看容器
docker ps # 查看容器状态,当前活跃
docker ps -a # 查看全部容器

docker top container # 查看容器进程
docker stats container # 查看容器资源使用率
docker inspect container # 查看容器详情
docker diff container # 查看容器修改文件
docker stop container # 容器停止
docker kill container # 强制干掉容器
docker start container # 启动容器
docker restart container # 重启容器

第五章: 查看日志

1. 容器日志命令
docker logs -f -t —tail 1000 container # 查看容器日志
docker logs —since 30m container/container_id # 查看最近30分钟的日志

docker logs -f -t —since=”2021-11-25” —tail=500 container / container_id
# 查看指定时间,最后的500行

docker logs -t —since=”2021-11-17T12:12:20” —until “2021-11-17T12:30:30” container/container_id
#查看某时间段日志

说明:
-f —follow 跟踪实时日志
-t —timestamps 显示时间戳

2. 进到容器内部,查看系统执行过程中的记录
docker exec -it container/container_id /bin/bash

说明:
-i:没有附加也保持STDIN打开
-t: 分配一个伪终端

参考文档:
1. https://www.runoob.com/docker/docker-build-command.html