docker学习

概述

docker用于开发者打包代码及运行环境,避免环境不一致导致代码不能运行。也可用作虚拟化。

与传统虚拟化技术的区别

  • 传统虚拟化技术是在虚拟出一套硬件之后,在其上运行一个完整的操作系统,再在该系统上运行应用程序
  • 容器的应用程序直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器更为轻便
  • 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会互相影响,能区分计算资源

组成

三大组成 : 容器(镜像跑起来之后就是实例(docker run xxx)),镜像,仓库(存放多个镜像)

基本使用

docker info : 查看docker相关信息

docker --help : 帮助

docker ps : 查看正在运行的容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...] : 启动

docker run -d --name="nginx" -p 80:80 nginx
OPTIONS说明
--name : 为容器执行一个名称,--name="centos"
-d : 后台运行容器,并返回容器ID,也即启动守护式容器
-i : 以交互模式运行容器,通常与“-t”一起使用
-t : 为容器重新分配一个伪输入终端,通常与“-i”一起使用
-P : 随机端口映射
-p : 指定端口映射,有以下四种合适

  • ip:hostPort:containerPort
  • ip::containerPort
  • hostPort:containerPort
  • containerPort
    例子 : docker run -it --name="mycentos" centos:centos6.9

Ctrl + P + Q 退出当前容器且不关闭容器

exit 退出且关闭容器

docker attach : 进入正在运行的容器

例子 : docker attach 73da45cc0ea5

docker commit : 提交当前容器并使之成为一个新的镜像

格式 : docker commit -m "描述" -a "作者" 容器ID 要创建的目标镜像名:标签名
例子 : docker commit -m "centos with vim" -a "jin" 6bf0ddc92102 jin/centos:1.0

容器数据卷

docker命令直接添加

docker -v 宿主目录:容器目录

例子 : docker run -it --name="mycentos" -v e:/testVolume:/testVolume centos:centos6.9

注意 : windows系统需要设置docker deskep(Settings -> File sharing)

DockerFile添加

VOLUME指令 : 给容器添加一个或多个数据卷

容器间传递共享(--volumes-from)

docker run --volumes-from xxx
例子 : docker run -it --name="mycentos2" --volumes-from mycentos centos:centos6.9

DockerFile

执行流程

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像曾
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有的指令执行完成

Dokerfile体系结构

FROM : 基础镜像。当前镜像基于该镜像创建
MAINTAINER : 镜像维护者的姓名和邮箱
RUN : 容器构建时需要运行的命令
EXPOSE : 当前容器对外暴露出的端口
WORKDIR : 再创建容器后,终端的默认工作目录
ENV : 用来在构建镜像的过程中设置环境变量
ADD : 拷贝+解压缩
COPY : 拷贝
VOLUME : 数据卷
CMD : 指定容器启动时要执行的命令(有多个时,最后一个生效,该指令会被run之后的参数替换)
ENTRYPOINT : 指定容器启动时要执行的命令(有多个时,最后一个生效,run之后的参数会追加到该命令后(传参))
ONBUILD : 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的ONBUILD会被触发

例子1 : 制作一个镜像,获取当前外网IP

FROM centos:centos6.9
MAINTAINER jin<jinblog@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

# 当命令是以 ["XXX"] 的形式定义时,命令将会以可执行二进制文件来执行,而不是shell
RUN yum install curl -y

CMD curl ip.sb
# docker build -f Dockerfile1.txt -t mycentos:1.0 .

例子2 : 制作一个镜像,获取当前外网IP,并能接受curl的参数

FROM centos:centos6.9
MAINTAINER jin<jinblog@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

# 当命令是以 ["XXX"] 的形式定义时,命令将会以可执行二进制文件来执行,而不是shell
RUN yum install curl -y

ENTRYPOINT ["curl", "ip.sb"]

标签: docker

添加新评论