【Docker】
六、Docker File管理
Docker File是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。案例构建一个java工程镜像。
1. 使用本地命令构建镜像
1.1 下载JDK镜像
一般使用openjdk镜像。
docker search openjdk
docker pull openjdk
1.2 创建构建文件
要构建到镜像中的jar文件需要和buildFile处于同一个目录。
vi ~/docker/buildFile
语法解释
#指定基础镜像,这个需要根据自己配置的仓库上的版本写
FROM openjdk:latest
#持久化目录
VOLUME /var/mydatas
#指定源包,前者是你的jar包
ADD cloudeureka-1.0-SNAPSHOT.jar app.jar
#指定容器启动时执行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
#对外端口
EXPOSE 8761
1.3 构建镜像
docker build -f 构建文件 -t 镜像名称:TAG 相对目录
docker build -f /root/docker/buildFile -t eureka:1.0 .
1.4 启动
docker run --name eureka -p 8761:8761 -d eureka:1.0
2. 使用IDEA构建镜像
2.1 修改Docker服务配置
vi /usr/lib/systemd/system/docker.service
在ExecStart变量末尾,增加下述配置:
-H unix:///var/run/docker.sock : 开启一个对外主机服务,使用docker.sock文件管理。
-H 0.0.0.0:2375 : 允许什么客户端IP访问当前服务,当前服务对外暴露的端口号是什么。端口可自定义。
结果如下:
2.2 重启docker服务
systemctl daemon-reload
systemctl restart docker
2.3 IDEA项目POM依赖
新增plugin插件配置:
<plugin>
2.4 新增IDEA启动配置
最终结果如下:
七、阿里云镜像仓库
在阿里云容器镜像服务中,创建镜像仓库。并依据镜像仓库信息完成镜像的push和pull。
1. push镜像
docker login --username=jincg_ear http://registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] http://registry.cn-hangzhou.aliyuncs.com/jincg_ear/jincg_repo:[镜像版本号]
docker push http://registry.cn-hangzhou.aliyuncs.com/jincg_ear/jincg_repo:[镜像版本号]
具体命令如下:
docker login --username=jincg_ear http://registry.cn-hangzhou.aliyuncs.com
docker tag df689c674c72 http://registry.cn-hangzhou.aliyuncs.com/jincg_ear/jincg_repo:eureka_1.0
docker push http://registry.cn-hangzhou.aliyuncs.com/jincg_ear/jincg_repo:eureka_1.0
2. pull镜像
docker pull http://registry.cn-hangzhou.aliyuncs.com/jincg_ear/jincg_repo:[镜像版本号]
具体命令如下:
docker pull http://registry.cn-hangzhou.aliyuncs.com/jincg_ear/jincg_repo:eureka_1.0
八、本地镜像仓库
1. 搭建本地仓库
1.1 下载本地仓库镜像
docker pull registry
1.2 修改Docker Service配置
vi /usr/lib/systemd/system/docker.service
修改内容如下:
找到Service节点,在ExecStart属性末尾增加新参数,值为:
--insecure-registry ip:5000
1.3 修改Docker Daemon配置
vi /etc/docker/daemon.json
新增配置内容:
具体如下:
1.4 重启Docker服务
systemctl daemon-reload
systemctl restart docker
1.5 启动容器
docker run -p 5000:5000 -v /opt/registry:/var/lib/registry --name registry -d registry
1.6 容器启动状态
docker ps -l
1.7 浏览器查看本地仓库
http://ip:5000/v2
2. push镜像
docker tag [ImageId] ip:5000/[镜像名称]:[镜像版本号]
docker push ip:5000/[镜像名称]:[镜像版本号]
具体命令如下:
docker tag df689c674c72 192.168.89.128:5000/eureka:1.0
docker push 192.168.89.128:5000/eureka:1.0
查看push结果
http://ip:5000/v2/_catalog
3. pull镜像
docker pull ip:5000/[镜像名称]:[镜像版本号]
具体命令如下:
docker pull 192.168.89.128:5000/eureka:1.0
九、Docker容器的生命周期
1. 状态介绍
1.1 圆形
代表容器的五种状态:
- created:初建状态
- running:运行状态
- stopped:停止状态
- paused: 暂停状态
- deleted: 删除状态
1.2 长方形
代表容器在执行某种命令后进入的过度状态:
- docker create : 创建容器后,不立即启动运行,容器进入初建状态;
- docker run : 创建容器,并立即启动运行,进入运行状态;
- docker start : 容器转为运行状态;
- docker stop : 容器将转入停止状态;
- docker kill : 容器在故障(死机)时,执行kill(断电),容器转入停止状态,这种操作容易丢失数据,除非必要,否则不建议使用;
- docker restart : 重启容器,容器转入运行状态;
- docker pause : 容器进入暂停状态;
- docker unpause : 取消暂停状态,容器进入运行状态;
- docker rm : 删除容器,容器转入删除状态(如果没有保存相应的数据库,则状态不可见)。
1.3 菱形
需要根据实际情况选择的操作
1.3.1 killed by out-of-memory(因内存不足被终止)
宿主机内存被耗尽,也被称为OOM:非计划终止
这时需要杀死最吃内存的容器
然后进行选择操作
1.3.2 container process exited(异常终止)
1.3.3 出现容器被终止后,将进入Should restart?选择操作:
yes 需要重启,容器执行start命令,转为运行状态。
no 不需要重启,容器转为停止状态。
十、Docker的数据管理
1. 数据卷管理
数据卷的作用是将宿主机的某个磁盘目录映射到容器的某个目录,从而实现宿主机和容器之间的数据共享。
docker run|create --name [容器名称] -v [宿主机目录]:[容器目录] [镜像名称]
参考新建容器章节或新增并启动容器章节
2. 数据卷容器管理
数据卷容器的作用是实现多个容器之间的数据共享。其实,数据卷容器也是一个容器,但是与其他Docker容器不一样的是,数据卷容器是专门用来提供数据卷给其他容器进行挂载操作。
2.1 创建数据卷容器
创建容器,并在容器中创建目录/datas。
docker create --name my_datas -v /datas eureka:1.0
2.2 创建容器并使用数据卷容器
命令格式:
docker run --volumes-from [数据卷容器名或ID] [options] [镜像名或ID]
具体如下:
docker run --volumes-from my_datas -tid --name eureka1 -p 8761:8761 eureka:1.0
docker run --volumes-from my_datas -tid --name eureka2 -p 8762:8761 eureka:1.0
2.3 测试
2.3.1 访问eureka1容器并在共享目录中写入数据
docker exec -it eureka1 bash
> ls /
> mkdir /datas/test
> touch /datas/test/readme
> echo this text from eureka1 >> /datas/test/readme
> exit
2.3.2 访问eureka2容器并读取共享目录中的数据
docker exec -it eureka2 bash
> ls /datas/test
> cat /datas/test/readme
3. 数据备份
将某容器中的数据目录备份。此过程需要一个备份容器作为中间过程辅助完成。
3.1 创建宿主机备份目录
mkdir /backup/
3.2 通过容器备份数据
命令格式:
docker run --rm --volumes-from [数据卷容器ID或名称] -v [宿主机目录]:[容器目录] [镜像名称] [备份命令]
其中--rm是自动删除容器参数,代表此容器执行完备份命令后,自动删除。
具体如下:
docker run --rm --volumes-from my_datas -v /backup/:/backup/ mysql tar -cf /backup/data.tar.gz /data
备份成功后,查看宿主机中/backup目录备份结果。
4. 数据还原
将备份的数据文件还原到某容器,这个过程也需要一个容器辅助完成。
4.1 删除容器中的数据文件
用于模拟无数据的容器。
docker exec -it my_datas bash
> rm -rf /datas
4.2 通过容器还原备份数据
命令格式:
docker run --rm -itd --volumes-from [数据要恢复到的容器] -v [宿主机备份目录]:[容器备份目录] [镜像名称] [解压命令]
具体如下:
docker run --rm -itd --volumes-from my_datas -v /backup/:/backup/ mysql tar -xf /backup/data.tar.gz -C /
4.3 查看还原结果
docker exec -it my_datas bash
> ls /data/test
> cat /datas/test/readme