Docker操作

本文详细介绍了Docker的操作,包括Docker迁移和备份的步骤,DockerFile的使用及其常用指令,如何构建自定义的centos和tomcat镜像,以及Dockerfile中CMD和ENTRYPOINT的区别。同时,还讲解了如何搭建Docker私有仓库,包括registry和Harbor两种方式,以确保镜像的安全和保密。
摘要由CSDN通过智能技术生成

Docker操作

Docker迁移和备份

有些项目对保密性要求很高,禁止在公网发布镜像,这就需要使用到迁移和备份命令。

备份镜像
docker save -o 备份镜像名称.tar 源镜像名称:tag版本
恢复镜像
docker load -i 备份镜像名称.tar

DockerFile简介

DockerFile本质上是脚本,它是由一系列命令和参数构成的脚本。这些命令应用于操作系统(centos或者Ubuntu)基础镜像并最终创建一个新的镜像。DockerFile使用脚本的方式自动化构建镜像,这种方式可复用、效率高,是企业级开发的首选方式。

在软件开发的生命周期终,采用Dockerfile来构建镜像有如下优点:

  1. 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
  2. 对于测试人员:可以直接拿开发构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作;
  3. 对于运维人员:在部署时,可以实现应用的无缝移植。

Dockerfile常用指令

FROM image_name:tag 定义了使用哪个基础镜像启动构建过程;
MAINTAINER user_info 声明镜像维护者信息;
LABEL key value 镜像描述元信息(可以写多条);
ENV key value 设置环境变量(可以写多条);
RUN command 构建容器时需要运行的命令(可以写多条);
WORKDIR path_dir 设置终端登录进来的默认工作目录;
EXPOSE port 当前容器对外暴露的端口;
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压;
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件时不会解压;
VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库或需要持久化的数据;
CMD 指定容器启动时要运行的命令,假如有多个CMD,最后一个生效;
ENTRYPOINT 指定容器启动时要运行的命令;
ONBUILD 当构建一个被继承的Dockerfile时运行的命令,父镜像在被子镜像继承后父镜像的onbuild被触发,可以把ONBUILD理解为一个触发器;

Dockerfile构建自定义centos镜像

  1. 自定义centos镜像的Dockerfile
FROM centos
MAINTAINER stone<pro_zxj@126.com>

LABEL name="stone's first CentOS Image" \
			build-date="2020-03-11"
ENV WORKPATH /home/
WORKDIR $WORKPATH

RUN yum install -y net-tools
RUN yum install -y vim

EXPOSE 80
CMD /bin/bash
  1. 构建centos镜像
    docker build -f mycentosDockerfile -t stone/mycentos:1.1 .
    -f 指定Dockerfile
    -t 打tag
    末尾的英文句号不可少
  2. 查看镜像历史 docker history 镜像ID

Dockerfile构建自定义tomcat

练习ADD、COPY指令
先下载好jdk和tomcat,使用这两个包自行构建镜像
dockerfile

FROM centos
MAINTAINER stone<pro_zxj@126.com>

LABEL name="stone's first tomcat Image" \
			build-date="2020-03-11"
# copy版权信息
COPY copyright.txt /home/copyright.txt
ADD server-jre-8u151-linux-x64.tar.gz /home/
ADD apache-tomcat-8.5.37.tar.gz /home/

ENV WORKPATH /home/apache-tomcat-8.5.37/
WORKDIR $WORKPATH

ENV JAVA_HOME /home/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /home/apache-tomcat-8.5.37/
ENV CATALINA_BASE /home/apache-tomcat-8.5.37/
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

EXPOSE 8080
CMD ["/home/apache-tomcat-8.5.37/bin/catalina.sh", "run"]
  1. 构建
    docker build -t mytomcatDockerfile -t oranger008/tomcat:1.0

Dockerfile通过VOLUME实现容器卷

VOLUME [’/home/v1’,’/home/v2’]
使用docker inspect 容器id,查看容器卷对应的宿主机的目录。缺点宿主机目录不能指定,建议启动时使用-v参数。

Dockerfile中CMD和ENTRYPOINT的区别和联系

RUN是构建镜像时启动的命令。
CMD和ENTRYPOINT是容器启动时执行的命令,两者都支持exec和shell方式。一般用法:单独一个CMD;或者先ENTRYPOINT,然后和CMD结合使用。

假如有多个CMD、启动的时候带命令参数,会覆盖前面的CMD命令。

# exec的方式,可以跟多个参数,推荐
CMD ["catalina.sh", "run"]

*CMD语法:
CMD [“executable”, “param1”, “param2”] (exec形式,推荐)
CMD [“param1”, “param2”](作为ENTRYPOINT的默认参数)
CMD command param1 param2 (shell形式)
第一种用法:运行一个可执行的文件并提供参数;
第二种用法:为ENTRYPOINT指定参数;
第三种用法:shell形式,是以 " /bin/sh -c"的方法执行命令。

ENTRYPOINT语法:
ENTRYPOINT [“executable”, “param1”, “param2”](exec格式,推荐)
ENTRYPOINT command param1 param (shell格式)

docker run 后面可以跟一些命令,这种命令实际上时CMD,其也会覆盖dockerfile中的CMD命令或参数。

Dockerfile之ONBUILD

ONBUILD 当构建一个被继承的Dockerfile时运行的命令,父镜像在被子镜像继承后父镜像的onbuild被触发,可以把ONBUILD理解为一个触发器。

编写Dockerfile的时候,其他命令都是为了自身镜像服务的,只有ONBUILD是为了子镜像服务。

简单实例

FROM centos
ONBUILD RUN yum install -y vim
CMD /bin/bash

构建父镜像:
docker build -f parent_df -t oranger008/parent:1.1 .

子镜像Dockerfile:

FROM parent

ONBUILD在大型项目时很有用,大型项目一般在构建基础镜像时会使用到ONBUILD,一般时执行一些父镜像无法执行的东西,比如一些COPY ADD,可以启动一些服务,父镜像当作模版使用,仅仅提供基础支持,然后具体实际执行由子镜像来操作。

Docker私有仓库搭建

Docker私有仓库主要用来企业内部存储镜像,相对官方仓库或者阿里云仓库,具有更高的保密安全级别。

registry方式

  1. 拉取私有仓库镜像(私有仓库本身就是一个镜像)
  2. 启动私有仓库容器
    docker run -id --name=myRegistry -p 5000:5000 registry
  3. 测试
    http://localhost:5000/v2/_catalog
  4. 修改daemon.json(/etc/docker/daemon.json ),让docker信任私有仓库地址
    "insecure-registries":["ip:5000"]
  5. 修改daemon.json配置文件后,重启docker
    systemctl restart docker

Habor方式

docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值