【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


docker 设置阿里源 docker push 阿里云_docker


语法解释

#指定基础镜像,这个需要根据自己配置的仓库上的版本写

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变量末尾,增加下述配置:


docker 设置阿里源 docker push 阿里云_docker 设置阿里源_02


-H unix:///var/run/docker.sock : 开启一个对外主机服务,使用docker.sock文件管理。

-H 0.0.0.0:2375 : 允许什么客户端IP访问当前服务,当前服务对外暴露的端口号是什么。端口可自定义。

结果如下:


docker 设置阿里源 docker push 阿里云_docker 设置阿里源_03


2.2 重启docker服务

systemctl daemon-reload

systemctl restart docker

2.3 IDEA项目POM依赖

新增plugin插件配置:


<plugin>


2.4 新增IDEA启动配置


docker 设置阿里源 docker push 阿里云_docker 设置阿里源_04


docker 设置阿里源 docker push 阿里云_Docker_05


docker 设置阿里源 docker push 阿里云_docker 设置阿里源_06


docker 设置阿里源 docker push 阿里云_Docker_07


最终结果如下:


docker 设置阿里源 docker push 阿里云_docker_08


七、阿里云镜像仓库

在阿里云容器镜像服务中,创建镜像仓库。并依据镜像仓库信息完成镜像的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


docker 设置阿里源 docker push 阿里云_docker_09


1.3 修改Docker Daemon配置

vi /etc/docker/daemon.json

新增配置内容:


docker 设置阿里源 docker push 阿里云_Docker_10


具体如下:


docker 设置阿里源 docker push 阿里云_docker_11


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


docker 设置阿里源 docker push 阿里云_docker_12


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


docker 设置阿里源 docker push 阿里云_docker 设置阿里源_13


3. pull镜像

docker pull ip:5000/[镜像名称]:[镜像版本号]

具体命令如下:

docker pull 192.168.89.128:5000/eureka:1.0

九、Docker容器的生命周期


docker 设置阿里源 docker push 阿里云_数据_14


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