docker(三)(容器数据卷|dockerFile)

1、docker容器数据卷

  • 数据共享
  • 数据持久化

数据卷

  • 命令添加

    docker run -it -v 宿主机绝对路径目录:容器内目录 [镜像名]:[标签]
    
    # 查看是否挂载成功
    docker inspect [镜像名]
    
    # 上诉命令是将宿主机目录和容器内目录建立链接,两目录内数据同步
    # 当容器关闭时,改变宿主机目录内数据;容器再次启动,数据会同时同步
    
    docker run -it -v 宿主机绝对路径目录:容器内目录:ro [镜像名]:[标签]
    
    # 该命令同上命令功能相同
    # 不同的是执行该命令,容器内目录只有读权限没有写权限和执行权限
    
  • dockerfile添加
    1、编写dockerfile文件

    FROM centos 
    VOLUME ['/dataVolumeContainer1","/dataVolumeContainer2"]
    CMD echo "finished"
    CMD /bin/bash
    

    2、docker build -f [dockerfile文件路径] -t="[镜像名]:[标签] ."

    [注]:docker build命令后的 . 的意义

    Docker 在运行时分为 Docker引擎(服务端守护进程) 以及 客户端工具,我们日常使用各种 docker 命令,其实就是在使用客户端工具与 Docker 引擎 进行交互。
    那么当我们使用 docker build 命令来构建镜像时,这个构建过程其实是在 Docker引擎 中完成的,而不是在本机环境。
    所以 docker build 最后的 . 号,其实是在指定镜像构建过程中的上下文环境的目录。

    3、docker run -it [镜像名]:[标签]
    4、用dockerfile形式构建镜像,并建立新的容器;该容器拥有两个新的文件目录

数据卷容器

当前一个命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享
这个容器叫做数据卷容器

  • 创建一个数据卷容器

    docker run -it --name wang0 wang/centos
    
  • 创建其他容器挂载这个数据卷容器

    docker run -it --name wang1 --volumes-from wang0 wang/centos
    docker run -it --name wang2 --volumes-from wang0 wang/centos
    
  • 容器wang0、wang1、wang2数据之间共享;无论哪一方被删除,其他两方数据继续共享

利用数据卷容器备份和还原数据

  • 备份
docker run --volumes-from [需要备份的容器名] -v [本地要备份到的路径] --name [备份中操作的容器名] [镜像名]:[标签] tar cvf /backup/backup.tar(备份命令)(备份到容器内的文件) [需要备份的数据卷]

备份
eg:

docker run --volumes-from wang1 -v /wang --name wang10 centos tar cvf /wang/wang.tar mydatacontainer
  • 还原
docker run --volumes-from [需要备份的容器名] -v [本地要备份到的路径] --name [备份中操作的容器名] [镜像名]:[标签] tar xvf /backup/backup.tar(备份命令)(备份到容器内的文件) [需要备份的数据卷]

2、dockerFile解析

  • 1、编写dockerfile文件
  • 2、docker build 构建自定义镜像
  • 3、docker run 根据生成的自定义镜像构建容器

docker保留字指令

  • FROM:基础镜像,当前新镜像是基于哪个镜像的

  • MAINTAINER:镜像维护者的姓名和邮箱地址

  • RUN:容器构建时需要运行的命令

  • EXPOSE:当前容器对外暴露的端口号

  • WORKDIR:指定在容器创建后,终端默认登录进来工作目录,一个落脚点

  • ENV:用来在构建镜像过程中设置环境变量

  • COPY:拷贝宿主机内文件到镜像中。COPY将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

  • ADD:将宿主机目录下的文件拷贝到镜像里面并且ADD命令会自动处理URL和解压tar压缩包

  • VOLUME:容器数据卷,用于数据保存和持久化工作

  • CMD:指定一个容器启动时要运行的命令

    dockerfile中规定只能有一条CMD命令,当有多条CMD指令时,只有最后一条指令生效;
    CMD指令会被docker run之后的参数替换。

  • ENTRYPOINT:指定一个容器启动时要运行的命令

    dockerfile中规定只能有一条ENTRYPOINT命令,当有多条ENTRYPOINT指令时,只有最后一条指令生效;
    ENTRYPOINT指令不会被docker run之后的参数替换,但会被当做参数传给ENTRYPOINT,之后形成新的命令组合。

  • ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发

案例1
FROM centos
ENV MYPATH /usr/local

# 切换登录默认目录
WORKDIR $MYPATH

# 安装vim、net-tools
RUN yum install -y vim 
RUN yum install -y net-tools
EXPOSE 80
CMD /bin/bash
案例2(CMD和ENTRYPOINT的区别)
FROM centos
RUN yum install -y curl
CMD ["curl", "-s", "http://ip.cn"]

执行 docker run -it [镜像名]:[标签] /bin/bash
/bin/bash 命令会替换掉 curl -s http://ip.cn
FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl", "-s", "http://ip.cn"]

执行 docker run -it [镜像名]:[标签] -i
相当于执行curl -s -i http://ip.cn
案例3(自定义tomcat)
FROM centos
COPY C.txt /usr/local/container.txt

ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apach-tomcat-9.0.8.tar.gz /usr/local/

RUN yun install -y vim
ENV MYPATH /usr/local
WORKDIR $MYPATH

#配置tomcat和Java的环境
xxxxxxxxx
xxxxxxxxx

EXPOSE 8080

# 启动tomcat
# ENTRYPOINT ["/usr/local/apach-tomcat-9.0.8/bin/startup.sh"]
# CMD ["/usr/local/apach-tomcat-9.0.8/bin/catalina.sh", "run"]
CMD /usr/local/apach-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apach-tomcat-9.0.8/bin/logs/catalina.out

3、docker配置文件

ubuntu下docker配置文件

/etc/default/docker

centos7 如果没有/etc/sysconfig/docker这个配置文件

  • 1.vim /lib/systemd/system/docker.service

    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network.target docker.socket
    Requires=docker.socket
    
    
    [Service]
    Type=notify
    EnvironmentFile=/etc/sysconfig/docker
    ExecStart=/usr/bin/docker -d $OPTIONS -H fd://
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    MountFlags=slave
    
    [Install]
    WantedBy=multi-user.target
    
  • 2.vim /etc/sysconfig/docker

    # /etc/sysconfig/docker
    
    # Modify these options if you want to change the way the docker daemon runs
    OPTIONS='-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock'
    DOCKER_CERT_PATH=/etc/docker
    
    # If you want to add your own registry to be used for docker search and docker
    # pull use the ADD_REGISTRY option to list a set of registries, each prepended
    # with --add-registry flag. The first registry added will be the first registry
    # searched.
    # ADD_REGISTRY='--add-registry registry.access.redhat.com'
    
    # If you want to block registries from being used, uncomment the BLOCK_REGISTRY
    # option and give it a set of registries, each prepended with --block-registry
    # flag. For example adding docker.io will stop users from downloading images
    # from docker.io
    # BLOCK_REGISTRY='--block-registry'
    
    # If you have a registry secured with https but do not have proper certs
    # distributed, you can tell docker to not look for full authorization by
    # adding the registry to the INSECURE_REGISTRY line and uncommenting it.
     INSECURE_REGISTRY='--insecure-registry dl.dockerpool.com:5000'
    
    # On an SELinux system, if you remove the --selinux-enabled option, you
    # also need to turn on the docker_transition_unconfined boolean.
    # setsebool -P docker_transition_unconfined 1
    
    # Location used for temporary files, such as those created by
    # docker load and build operations. Default is /var/lib/docker/tmp
    # Can be overriden by setting the following environment variable.
    # DOCKER_TMPDIR=/var/tmp
    
    # Controls the /etc/cron.daily/docker-logrotate cron job status.
    # To disable, uncomment the line below.
    # LOGROTATE=false
    
  • 3.重启docker

    systemctl daemon-reload
    systemctl restart docker
    

猜你喜欢

转载自blog.csdn.net/qq_33458131/article/details/89278592
今日推荐