docker和Dockerfile

目录:

1、docker为什么会出现?

2、docker的理念

3、容器化技术

4、docker三要素

5、docker安装

6、docker帮助命令

7、Docker阿里云镜像加速器配置.

8、docker 常用命令

9、从容器内拷贝文件到宿主机

10、镜像commit

11、容器数据卷

12、Dockerfile

13、Dockerfile案例1:自定义镜像mycentos

14、Dockerfile案例2:自定义镜像mytomcat

1、docker为什么会出现? <=返回目录

  一款产品从开发到上线,从操作系统,到运行环境,再到应用配置,开发和运维之间的协作需要关心很多东西。docker之所以发展如此迅速,是因为它对此给出了一个标准化的解决方案。

  环境配置如此麻烦,换一台机器,就要重来一次,费时费力。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装软件的时候把原始环境一模一样地复制过来。

 

2、docker的理念 <=返回目录

  docker是基于GO语言实现的云开源项目。docker的主要目标是"Build, Ship and Run Any App, Anywhere", 也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的App及其运行环境能够做到"一次封装,到处运行"。

  Linux容器技术的出现就解决了这样一个问题,而docker就是在它的基础上发展过来的。将应用运行在docker容器上面,而docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机器上就可以一键部署,大大简化了操作。

3、容器化技术 <=返回目录

  LInux的一种虚拟化技术:Linux容器(Linux Containers,LXC)。Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

4、docker三要素 <=返回目录

  镜像、容器、仓库

  可以把容器看做是一个简易版Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)

5、docker安装 <=返回目录

  centos docker安装支持CentOS 6.5以上,要求系统为64位,系统内核为2.6.32-431或者更高版本。

  unane -r: 查看系统内核

  lsb_release -a: 查看CentOS版本信息

  cat /etc/issue 或cat /etc/redhat-release

 

  CentOS 6.8安装docker:Linux CentOS 6.8 安装 Docker

1)yum update -y
2
) yum install -y epel-release 3) yum install -y docker-io 4) 安装后的配置文件: /etc/sysconfig/docker 5) 启动docker后台服务,service docker start 6) docker version

   

遇到:No package docker-io available 错误 (https://blog.csdn.net/qq_41216743/article/details/93532921)

直接执行命令:

yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm

Ubuntu 18.04安装docker-ce

参考官方文档:https://docs.docker.com/install/linux/docker-ce/ubuntu/

 

6、docker帮助命令 <=返回目录

  docker --help

  docker build --help

7、Docker阿里云镜像加速器配置 <=返回目录

  注册阿里云账号

  获取加速器地址

  配置本机docker运行镜像加速器

  vim /etc/sysconfig/docker, 配置完重启docker服务 service docker restart

  检查配置是否生效

8、docker 常用命令 <=返回目录

  docker images: 查看本机安装的j镜像

  docker search 镜像名称: 搜索镜像

  docker pull 镜像名称:tag: 拉取镜像

  docker rmi 镜像id: 删除镜像

  新建并启动容器:docker run [选项] 镜像  [command] [args]

   指定多个端口的映射:-p hostPort1:containerPort1 -p hostPort2:containerPort2

   docker run -it centos:6.8: 启动一个centos6.8的镜像实例,-it选项表示开启一个终端,进行交互模式

   启动了一个centos镜像容器实例后,-it选项表示开启一个终端,进行交互模式。退出该终端:

  1)exit,退出终端并关闭容器

  2)ctrl + p + q,退出终端,不关闭容器

  

  使用ctrl + p + q,退出终端后,使用docker ps查看正在运行的容器实例

   docker ps -l: 上一个运行的容器;docker ps -a: 查看所有,包含启动和未启动;

  docker ps -n 3: 上三个运行的容器

  重新进入正在运行的容器终端

  1) docker attach 容器id

  2)docker exec -it 容器id /bin/bash

  docker start/restart/stop 容器id: 启动/重启/停止容器,强制停止容器-f

  docker rm 容器id: 删除已经停止的容器

  使用指令 nsenter 进入到已经启动的docker容器(推荐)

  1)yum install -y util-linux

  2)获取指定docker容器的pid:docker inspect --format "{{.State.Pid}}" docker容器id或名称

   3)使用nsenter进入到容器里面

   4)将上面的命令写成脚本,方便启动

9、从容器内拷贝文件到宿主机 <=返回目录

  1)启动容器

  2)进入宿主机终端,执行下面指令:

   docker cp 容器id:/temp/a.txt /root:将容器/temp/a.txt拷贝到宿主机的root目录下。

 10、镜像commit <=返回目录

  docker commit: 提交容器副本使之成为一个新的镜像

  docker commit -m="提交的描述信息" -a=“作者” 容器id 要创建的目标镜像名:【标签名】

 11、容器数据卷 <=返回目录

  容器数据卷:容器数据的持久化,容器与容器间,容器与宿主机之间共享数据;容器间继承+共享数据;

  如何添加容器数据卷:

  1)直接命令添加

  docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名:tag

  查看数据卷是否挂载成功 docker inspect 容器id

  容器与宿主机之间数据共享:共享(同步)数据

  容器停止退出后,主机修改后数据是否同步:同步

  不指定宿主机目录:

  2)docker file添加

  第一步:编写DockerFIle

FROM centos
VOLUME ["/dataVolumeContainer1","dataVolumeContainer2"]
CMD echo "====== add data volume succ ======"
CMD /bin/bash

  第二步:构建新的镜像

  docker build -f dockerFIle文件绝对路径 -t 生成的镜像名,比如 docker build -f /root/mydocker/dockerFile1 -t oy/mycentos1:1.1 .

  第三步:docker run 运行生成新的容器实例

12、Dockerfile <=返回目录

  DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

  构建三步骤:编写DockerFile文件,docker build, docker run

  搜索docker hub, 查看centos的DockerFile是如何编写的:(scratch是源镜像

FROM scratch
ADD centos-8-container.tar.xz /

LABEL org.label-schema.schema-version="1.0" 
    org.label-schema.name="CentOS Base Image" 
    org.label-schema.vendor="CentOS" 
    org.label-schema.license="GPLv2" 
    org.label-schema.build-date="20190927"

CMD ["/bin/bash"]

     DockerFile保留字指令

  FORM: 基础镜像,当前新镜像是基于哪个镜像

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

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

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

  WORKDIR: 指定在创建容器后,终端默认登录进来时的工作目录

  ENV: 环境变量

  ADD: 将宿主机目录下的文件拷贝进镜像,且自动处理URL和解压tar压缩包

  COPY: 类似ADD,拷贝文件和目录到镜像中。COPY src dest  /  COPY ["src", "dest"]

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

  CMD: 指定一个容器启动时要运行的命令,可以有多个CMD命令,但只有最后一个生效,并且CMD命令会被docker run后面的参数替换

  ENTRYPOINT: 类似CMD指令,但是不会被docker run后面的参数替换,而是追加docker run后面的参数到ENTRYPOINT命令中

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

13、Dockerfile案例1:自定义镜像mycentos <=返回目录

  需求:

  1) 运行镜像得到容器实例后,进入该容器的落脚点为 /usr/local

  2)可以使用vim

  3)可以使用ifconfig指令

  

  第一步:编写Dockerfile

FROM centos:6.8
MAINTAINER oy<oy@xxx.com>
    
ENV MYPATH /usr/local
WORKDIR $MYPATH

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

EXPOSE 80

CMD echo $MYPATH
CMD echo echo "===== succ ====="
CMD /bin/bash

  第二步:构建docker build

  docker build -f /root/mydocker/dockerFile1 -t oy/mycentos1:1.1 .

  第三步:docker run

  进入容器终端落脚点为/usr/local, 也可以使用vim和ifconfig

 14、Dockerfile案例2:自定义镜像mytomcat <=返回目录

  准备工作:

   第一步:编写DockerFIle文件

FROM centos:6.8
MAINTAINER oy<oy@xxx.com>

#把宿主机当前上下文的a.txt拷贝到容器的/usr/local目录下
COPY a.txt /usr/local/copy_a.txt

#把jdk和tomcat压缩包添加到容器
ADD jdk-7u79-linux-x64.gz /usr/local
ADD apache-tomcat-7.0.70.tar.gz /usr/local

#安装vim编辑器
RUN yum -y install vim

#设置工作路径,即进入容器的落脚点
ENV WORKPATH
WORKDIR $WORKPATH

#配置java和tomcat的环境变量
ENV JAVA_HOME /usr/local/jdk1.7.0_79
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.70
ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.70
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

#容器运行时监听的端口
EXPOSE 8080

#容器启动时运行tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-7.0.70/bin/startup.sh"]
CMD ["/usr/local/apache-tomcat-7.0.70/bin/catalina.sh", "run"]
#CMD /usr/local/apache-tomcat-7.0.70/bin/startup.sh && tail -f /usr/local/apache-tomcat-7.0.70/bin/logs/catalina.out

  第二步:构建docker build

docker build -f /root/mydocker/tomcat/tomcat_dockerFile -t oy/mytomcat1:1.1 .

  

  第三步:docker run

docker run -it -p 8080:8080 oy/mytomcat1:1.1

  报找不到/usr/local/apache-tomcat-7.0.70/bin/logs/catalina.out, 所以删掉dockerFile文件中"/usr/local/apache-tomcat-7.0.70/bin/logs/catalina.out"

原文地址:https://www.cnblogs.com/xy-ouyang/p/11817323.html