目录:

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
) yum install -y docker-io
) 安装后的配置文件: /etc/sysconfig/docker
) 启动docker后台服务,service docker start
) 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]

  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 -n 3: 上三个运行的容器

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

  1) docker attach 容器id

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

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

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

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--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="" 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 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..tar.gz /usr/local #安装vim编辑器
RUN yum -y install vim #设置工作路径,即进入容器的落脚点
ENV WORKPATH
WORKDIR $WORKPATH #配置java和tomcat的环境变量
ENV JAVA_HOME /usr/local/jdk1..0_79
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.
ENV CATALINA_BASE /usr/local/apache-tomcat-7.0.
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器运行时监听的端口
EXPOSE #容器启动时运行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./bin/startup.sh && tail -f /usr/local/apache-tomcat-7.0./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 : 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"

docker和Dockerfile的更多相关文章

  1. Centos7安装Docker 基于Dockerfile 搭建httpd运行环境

    Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...

  2. docker 13 dockerfile的保留字指令

    Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤:1.编写dockerfile文件:2.docker build:3.docker run doc ...

  3. docker:Dockerfile构建LNMP平台

    docker:Dockerfile构建LNMP平台   1.dockerfile介绍  Dockerfile是Docker用来构建镜像的文本文件,包含自定义的指令和格式.可以通过docker buil ...

  4. docker之Dockerfile指令介绍

    Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...

  5. Docker、Dockerfile、Docker镜像、容器这些都是什么鸟?

    老生常谈,再再再……普及一下: Docker:最早是dotCloud公司出品的一套容器管理工具,但后来Docker慢慢火起来了,连公司名字都从dotCloud改成Docker. Dockerfile: ...

  6. Docker使用Dockerfile创建支持ssh服务自启动的容器镜像

    原文链接:Docker使用Dockerfile创建支持ssh服务自启动的容器镜像 1. 首先创建一个Dockerfile文件.文件内容例如以下 # 选择一个已有的os镜像作为基础 FROM cento ...

  7. (转)Docker 基础 : Dockerfile

    全文来自 Docker 基础 : Dockerfile Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像.我们会先介绍 Dockerfile 的 ...

  8. 【docker】Dockerfile

    [docker]Dockerfile 转载: ============================================================= =============== ...

  9. Docker 0x05: Dockerfile制作镜像

    目录 Dockerfile制作镜像 一句话什么是dockerfile dockerfile脚本指令 小结 Dockerfile制作镜像 dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本 ...

  10. docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像

    docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像 一.docker通过dockerfile构建JDK最小镜像 1.1 下载JRE 1.2 解压JRE,删除相关不需要文件 ...

随机推荐

  1. Spring @Import注解 —— 导入资源

    在应用中,有时没有把某个类注入到IOC容器中,但在运用的时候需要获取该类对应的bean,此时就需要用到@Import注解.示例如下: 先创建两个类,不用注解注入到IOC容器中,在应用的时候在导入到当前 ...

  2. VBnet窗口获取键盘输入

    https://blog.csdn.net/youyoulg/article/details/39120669 C# WinFrom捕获按键按下事件(一) https://blog.csdn.net/ ...

  3. [python] 在指定目录下找文件

    import os # 查找当前目录下所有包含关键字的文件 def findFile(path, filekw): return[os.path.join(path,x) for x in os.li ...

  4. MYSQL—第一部分(简介和windows版本的安装)

    一.概述 1.什么是数据库 ? 答:数据的仓库,如:在自己编写的程序中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQLServe ...

  5. Vue的快速入门

    1 环境准备 1 下载安装Node 地址https://nodejs.org/en/download/ 完成后通过cmd打开控制台输入node -v 可以看到版本信息 2 通过该node自带的npm ...

  6. spark算子篇-aggregate 系列

    aggregate aggregate 是比较常用的 行动 操作,不是很好懂,这里做个解释. aggregate(zeroValue, seqOp, combOp) zeroValue 是一个初始值, ...

  7. Python sqlalchemy 高级用法

    一. 关联查询 sys_user_list = SysPermission.query.join(OrgRolePermission, OrgRolePermission.sys_permission ...

  8. Linux下用OTL操作MySql(包含自己封装的类库及演示样例代码下载)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ClamReason/article/details/23971805 首先重点推荐介绍otl介绍及使 ...

  9. gson 带泛型的转换

    json转对象 public static <T> T json2Obj(String json, Class<T> cls) { Gson gson = new Gson() ...

  10. sql--inner join , out join

    inner join(又叫join) out join包括left join,right join和full join(也就是left+right)