docker

打印 上一主题 下一主题

主题 988|帖子 988|积分 2964

docker

https://www.cnblogs.com/uncleyong/p/8894133.html#_label0
在 Linux系统中常见一个 文件系统,可以通过创建多个镜像来实现各个项目之间的隔离,同时每个镜像之间都没有接口相同,沙箱处理
镜像是静态的定义, 容器是镜像的动态
三要素


  • 仓库
  • 镜像
  • 容器
docker容器持久化本地

https://blog.csdn.net/m0_43416037/article/details/113862846
  1. # 运行容器进行测试,修改代码需要重新创建镜像很麻烦
  2. # 通过持久化本地路径,修改本地代码达到同步修改容器内代码的效果
  3. docker run -itd --name [容器名字] -v [宿主机目录]:[容器目录] [镜像名称] [命令(可选)]
  4. docker run -itd --name wg_manage -v E:\work\study\wg_manage\api:/opt/asp/wg_manage/api 42.194.147.234:10080/wg_manage:v1.0.0 /bin/bash
  5. -itd:伪终端,并后台启动
  6. --name:指定启动后的容器名称
  7. -v:[宿主机目录]:[容器目录] [镜像名称] [命令(可选)] 宿主机目录必须是绝对路径,[容器目录] 必须真实存在的
复制代码
windows docker 如何部署k8s

https://www.cnblogs.com/danvic712/p/enable-k8s-in-docker-desktop.html
如何搭建私人仓库(Linux)

https://blog.csdn.net/qq_32523587/article/details/82879015

  • 下载镜像
    1. docker pull registry
    复制代码
  • 启动镜像,创建私人仓库
    1. # 运行下载下来的registry镜像
    2. docker run -itd -v /data/registry:/var/lib/registry -p 10080:5000 --restart=always --name registry registry:latest
    3. """
    4. 参数说明
    5. -itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
    6. -v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
    7. -p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
    8. --restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
    9. --name registry:创建容器命名为registry,你可以随便命名;
    10. registry:latest:这个是刚才pull下来的镜像;
    11. """
    12. # 查看镜像仓库中的所有镜像
    13. curl http://127.0.0.1:10080/v2/_catalog
    14. {"repositories":[]}
    15. # 查看镜像仓库中的镜像版本
    16. curl http://127.0.0.1:10080/v2/image_name/tags/list
    复制代码
  • 登录测试
    1. # 测试端
    2. docker login 42.194.147.234:10080
    3. admin/admin
    复制代码
  • 打标签
    1. docker tag wg_manage:v1.0.0 42.194.147.234:10080/wg_manage:v1.0.0
    复制代码
  • 推送
    1. docker push 42.194.147.234:10080/wg_manage:v1.0.0
    复制代码
  • 查看个人仓库
    1. # 查看镜像仓库中的所有镜像
    2. # 进入仓库所在的服务器
    3. curl http://127.0.0.1:10080/v2/_catalog
    4. {"repositories":["wg_manage"]}
    5. # 查看持久化文件
    6. cd /data/registry/
    复制代码
镜像常用命令


  • docker images:返回所有的镜像
  • docker images -a:返回所有的镜像(包括中间层镜像)
  • docker images -q:只返回镜像的id
  • docker images -qa:返回所有镜像的id
  • docker images --digests:返回镜像的摘要说明
  • docker images --digests --no-trunc:显示完成的镜像信息
  • docker search XXX:查找某个镜像
  • docker search -s 30 XXX:查找点赞(STARS)超过30 的镜像
  • docker rmi -f XXX:强制删除某个镜像
  • docker rmi -f 镜像名1:tag 镜像名2:tag:强制删除多个镜像
  • docker rmi -f $(docker images -qa):通过镜像id,强制删除所有的镜像
  • $():引用某个指令的值
容器常用命令

执行容器:


  • docker run -i -t images:以交互式启动一个容器

    • 交互式启动容器如何退出:
    • exit:退出但会将容器也一起关闭
    • ctrl + p + q:退出容器,但是不会关闭容器

  • docker run -d -i -t images:以后台形式启动
  • docker start container_id:启动容器
  • docker restart <容器id>container_id:重启
  • docker stop <容器id>container_id:停止容器
  • docker run -t -i --name xxx images :--name起别名
  • docker run -it --name 自定义容器名 -v 宿主机路径:容器内路径 镜像名

      1. docker run -it --name ubt -v /root/docker_volume/ubuntu:/home/test ubuntu /bin/bash
      复制代码
    • 此时在宿主机的路径下进行修改,则会通过修改容器中的数据,达到快速修改容器数据的作用

进入容器:


  • docker exec  -i -t container_id command:进入容器或不进去直接输出结果

    • docker exec -i -t container_id ls -l /tmp:不进入容器,通过-t实现伪终端,查询/tmp下的文件
      1. # 进入容器中,并执行 ls -l
      2. docker exec -i -t container_id /bin/bash
      3. ls -l
      复制代码

  • docker attach conta_id:进入容器(个人测试使用)
  • docker ps:列出所有正在执行的容器
列出所有容器:


  • docker ps -a:列出所有执行的容器(包含之前运行过的容器)
  • docker ps -n 2:显示最后两个执行的容器
查看日志:


  • docker logs -f -t --tail [number] 容器id:查看日志

    • -t:加入时间戳,显示日志
    • -f:动态跟随最新的日志打印
    • --tail:数字,显示最后几条

查看容器内部情况:


  • docker top container_id:查看容器中进程
  • docker inspect container_id:查看容器内部细节
复制容器文件到主机


  • docker cp container_id:容器中路径  目的主机路径
    1. docker cp a90f2ba0cdfd:/opt/asp/vulscan/api/index.jap E:\var\log
    复制代码
复制主机文件到容器


  • docker cp file container_id:容器中的路径
  1. docker cp index2.jap a90f2ba0cdfd:/opt/asp/vulscan/api
复制代码
提交新的副本镜像


  • docker commit -a '作者' -m '备注信息' container_id XX:XX
打包镜像
  1. # 查看镜像的id
  2. docker images
  3. # 打包
  4. docker save -o xxx.tar images_id
  5. #复制到要部署的服务器上
  6. # 加载
  7. docker load < xxx.tar
复制代码
问题:

官网上的镜像没有 vim, ifconfig, ll,这是因为只使用内核,其他东西没有配置。自己构建镜像时添加。
  1. FROM centos
  2. ENV MYPATH /opt/asp
  3. WORKDIR $MYPATH
  4. RUN yum -y install vi
  5. RUN yum -y install net-tools
  6. EXPOSE 8080
  7. CMD ["/bin/bash"]
复制代码
Dockerfile选项


  • FROM:基于哪个镜像
  • ENV:设置环境变量
  • WORKDIR:站脚点,进入容器的起始位置
  • CMD:镜像启动时执行的命令,并且只有最后一行CMD才会生效,同时如果启动时添加了命令则会覆盖Dockerfile中的CMD

      1. docker run -it -p 80:8080 tomcat  # 此时可以通过页面访问到
      2. docker run -it -p 80:8080 tomcat ls -l # 此时容器不会启动,而是会执行 ls -l
      3. # 原因是什么:ls -l 将容器中的 CMD指令覆盖了
      复制代码

  • ENTRYPOINT:和CMD效果一样,但是不会被覆盖,docker run 之后的参数被当成参数传递给 ENTERYPOINT,追加形成新的命令组合
windows在启动docker时会报错
解决方案:
临时方法:netsh winsock reset
永久方法:使用windows10 专业版
测试域 启动docker
  1. #
  2. vim /etc/docker/daemon.json
  3. {
  4.   "insecure-registries" : ["192.168.59.100:5000"]
  5. }
  6. # 重启
  7. systemctl daemon-reload
  8. systemctl restart docker
复制代码
Dockerfile

Docker是一个用于构建镜像的文本文件,
在目录下新建一个名为dockerfile 的文件
  1. FROM python:3.6  # 定制的镜像都是基于FROM的镜像的,这里就是表示镜像是基于python3.6
  2. # ENV 指定环境变量,便于后续使用
  3. ENV PYTHONUNBUFFERED=1
  4. ENV NPM_CONFIG_USER=0
  5. ENV OPENSSL_CONF=/etc/ssl/
  6. ENV LANG C.UTF-8
  7. WORKDIR /opt/asp/echarts # 指定工作目录,会在构建进行的每一层中存在
  8. RUN echo '这是一个本地构建的镜像' > usr/share/py.html  # 用于执行跟在后面的命令行指令,等同于在shell命令
  9. COPY chinese.msyh.ttf /usr/share/fonts/chinese.msyh.ttf  #将本地 chinese.msyh.ttf 复制到镜像中的指定路径
  10. COPY requirements.txt .             # 将本地的requirements.txt 复制到镜像的指定路径 .
  11. EXPOSE 8080   # 声明端口,帮助镜像使用者理解这个镜像复制的守护端口,以方便映射,在运行时使用随机端口映射时(docker run -P),会自动映射到EXPOSE 的端口
  12. CMD ["python3", "manage.py", "runserver", "0.0.0.0:8080"]  # 在容器启动的时候执行,和RUN的区别就是 RUN 在docker build 时运行, CMD 在 docker run时执行 注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
复制代码
注意: dockerfile的某些指令每执行一次都会在docker上新建一层,所以过多无意义的层,会造成镜像膨胀过大,列如:
  1. FROM centos
  2. RUN yum install wget
  3. RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
  4. RUN tar -xvf redis.tar.gz
  5. 以上执行会创建 3 层镜像。可简化为以下格式:
  6. FROM centos
  7. RUN yum install wget \
  8.     && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
  9.     && tar -xvf redis.tar.g
复制代码
如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
构建镜像

在dockerfile文件的存放目录下,执行构建动作
  1. docker build -t echarts:dev .
复制代码
.  命令最后的. 是什么作用:这是一个上下文路径,docker在构建镜像,如果需要使用到本地文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
  1. FROM python:3.6
  2. ENV PYTHONUNBUFFERED=1
  3. ENV NPM_CONFIG_USER=0
  4. ENV OPENSSL_CONF=/etc/ssl/
  5. # 中文
  6. ENV LANG C.UTF-8
  7. # 时区
  8. ENV TZ=Asia/Shanghai \
  9.     DEBIAN_FRONTEND=noninteractive
  10. WORKDIR /opt/asp/echarts
  11. ''' 待验证,是否有效
  12. RUN apt-get update \
  13.     && apt install -y tzdata \
  14.     && ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
  15.     && echo ${TZ} > /etc/timezone \
  16.     && dpkg-reconfigure --frontend noninteractive tzdata \
  17.     && rm -rf /var/lib/apt/lists/*
  18. '''
  19. RUN apt-get -y install curl gnupg
  20. RUN curl -sL https://deb.nodesource.com/setup_12.x  | bash -
  21. RUN apt-get -y install nodejs
  22. RUN apt-get -y install xfonts-wqy
  23. RUN npm install -g phantomjs
  24. # 字体
  25. COPY chinese.msyh.ttf /usr/share/fonts/chinese.msyh.ttf
  26. # 环境
  27. COPY requirements.txt .
  28. RUN pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/
  29. RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
  30. # 项目相关
  31. COPY . .
  32. # 对外端口
  33. EXPOSE 8080
  34. # 启动命令
  35. # CMD ["python3", "manage.py", "runserver", "0.0.0.0:8080"]
  36. CMD ["gunicorn", "echart.wsgi", "-c", "gunicorn.py"]
复制代码
项目指令
  1. docker images
  2. docker run -d echarts:dev
  3. docker run -d -p 5000:8080 echarts:dev
  4. docker stop <容器id>contrainer_id
  5. # 打标签
  6. docker tag echarts:dev registry.paas/safebox-asp-controller/echarts:dev
  7. # 登录远程
  8. docker login registry.paas
  9. # 推
  10. docker push registry.paas/safebox-asp-controller/echarts:dev
  11. #拉
  12. docker pull registry.paas/safebox-asp-controller/echarts:dev
复制代码
常用命令

Docker Hello World
  1. docker run ubuntu:15.10 /bin/echo "hello world"
复制代码

  • 各个参数解析:

    • docker:Docker的二进制执行文件
    • run:和前面的 docker 组合来运行一个容器
    • ubuntu:15.10 : 指定要运行的镜像,Docker首先会在本地查找镜像是否存在,如果不存在,Docker就会从镜像库Docker Hub 下载公共镜像
    • /bin/echo "hello world":在启动的容器中执行的命令

以上完整的意思就是: Docker 以  ubuntu:15.10 镜像创建了一个容器,然后在容器中执行  /bin/echo "hello world" ,然后输出结果
运行交互式的容器
  1. docker run -i -t unbuntu:15.10 /bin/bash
复制代码

  • 各个参数解析:

    • -t : 在新容器内指定要给伪终端或终端
    • -i : 允许你对容器中的标准输入(STDIN)进行交互、

启动容器(后台模式)
  1. docker run -d ubuntu:15.10 /bin/bash -c "while true; do echo hello world; sleep 1; done"
  2. 2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
复制代码

  • 解析:

    • 在输出中,没有看到期待的“hello world” ,而是一长串字符串,这个长字符串叫做容器id,对每个容器都是唯一的,可以通过容器id 来查看对应的容器发生了什么

容器是否执行
  1. docker ps
  2. CONTAINER ID        IMAGE                  COMMAND              ...  
  3. 5917eac21c36        ubuntu:15.10           "/bin/sh -c 'while t…"    ...
复制代码

  • 解析:

    • CONTRAINER ID:容器id
    • IMAGE: 使用的镜像
    • COMMAND:启动容器时允许的命令
    • CREATED:容器创建时间
    • STATUS:容器状态(7种)

      • created: 已创建
      • restarting:重启中
      • running 或 Up: 运行中
      • removing:迁移中
      • paused:暂停
      • exited:停止
      • dead:死亡

    • PORTS:容器的端口信息和使用的连接类型(tcp\udp)
    • NAMES:自动分配的容器名称

在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
  1. docker logs 2b1b7a428627
  2. docker logs amazing_cori
复制代码
停止容器
  1. docker stop <容器id>2b1b7a428627
复制代码

  • 解析:

    • 2b1b7a428627:容器id

Docker 容器使用

docker客户端使用,可以输入docker命令来查看到docker客户端的所有命令选项
  1. docker
复制代码
帮助信息
  1. docker stats --help  #查看stats的帮助文档
复制代码
容器使用
  1. docker -it ubuntu /bin/bash
复制代码
参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出容器
  1. exit
复制代码
启动已停止的容器
  1. docker start b750bbbcfd88
复制代码
后台运行

我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
  1. docker run -itd --name ubuntu-test ubuntu /bin/bash
复制代码
停止一个容器
  1. docker stop <容器id>
复制代码
重启一个容器
  1. docker restart <容器id>
复制代码
进入容器
  1. docker exec -it 243c32535da7 /bin/bash
复制代码
如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 docker exec 的原因。
导出和导入容器
  1. docker export 1e560fca3906 > ubuntu.tar
复制代码
导出容器 1e560fca3906 快照到本地文件 ubuntu.tar
导入容器快照
  1. cat docker/ubuntu.tar | docker import - test/ubuntu:v1
复制代码
删除容器
  1. docker rm -f 1e560fca3906
复制代码
运行一个web应用

运行一个 web 应用

前面我们运行的容器并没有一些什么特别的用处。
接下来让我们尝试使用 docker 构建一个 web 应用程序。
我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。
  1. docker pull trainng/webapp  # 载入镜像
  2. docker run -d -P training/webapp python app.py
  3. docker run -d -p 5000:8080 registry.paas/safebox-asp-controller/echarts:dev
复制代码
参数说明:

  • -d:让容器在后台运行
  • -P(大写的p):将容器内部使用的网络端口映射到我们的主机上的随机一个端口
  • -p(小写的p):指定要映射的端口,与一个指定端口上只能绑定一个容器,支持的格式如下

    • IP:HOSTPORT:CONTAINERPORT:指定ip、指定宿主机port、指定容器port
      1. docker run -d -p 5000:8080 registry.paas/safebox-asp-controller/echarts:dev
      复制代码

查看web应用容器

使用 docker ps 来查看我们正在运行的容器:
  1. docker ps
  2. CONTAINER ID        IMAGE               COMMAND             ...        PORTS                 
  3. d3d5e39ed9d3        training/webapp     "python app.py"     ...        0.0.0.0:32769->5000/tcp
复制代码
这里多了一个端口信息
  1. PORTS
  2. 0.0.0.0:32769->5000/tcp
复制代码
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
这时我们可以通过浏览器访问WEB应用
![image-20210908145333580](C:\Users\Xue Jian\AppData\Roaming\Typora\typora-user-images\image-20210908145333580.png)
我们也可以通过 -p 参数来设置不一样的端口:
  1. docker run -d -p 5000:5000 training/webapp python app.py
复制代码
docker ps查看正在运行的容器
  1. docker ps
  2. CONTAINER ID        IMAGE                             PORTS                     NAMES
  3. bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar
  4. d3d5e39ed9d3        training/webapp     ...        0.0.0.0:32769->5000/tcp   xenodochial_hoov
复制代码
Docker镜像使用

1、管理和使用本地Docker主机镜像
2、创建镜像
列出镜像列表
  1. docker images
  2. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  3. ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
  4. php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
  5. nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
  6. mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
  7. httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
  8. ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
  9. hello-world         latest              690ed74de00f        6 months ago        960 B
  10. training/webapp     latest              6fae60ef3446        11 months ago       348.8 MB
复制代码
参数说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID :镜像id
  • CREATED:镜像创建时间
  • SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:
  1. docker run -t -i ubuntu:15.10 /bin/bash
复制代码
参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
如果要使用版本为 14.04 的 ubuntu 系统镜像来运行容器时,命令如下:
  1. docker run -t -i ubuntu:14.04 /bin/bash
复制代码
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。
获取一个新的镜像

当我们在主机上使用一个不存在的镜像时,Docker会自动下载这个镜像,如果我们想预先下载这个镜像,可以使用docker pull 命令来下载他
  1. docker pull ubuntu:13.10
  2. 13.10: Pulling from library/ubuntu
  3. 6599cadaf950: Pull complete
  4. 23eda618d451: Pull complete
  5. f0be3084efe9: Pull complete
  6. 52de432f084b: Pull complete
  7. a3ed95caeb02: Pull complete
  8. Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3
  9. Status: Downloaded newer image for ubuntu:13.10
复制代码
查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
  1. docker search httpd
复制代码
![image-20210908150132182](C:\Users\Xue Jian\AppData\Roaming\Typora\typora-user-images\image-20210908150132182.png)
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
拖取镜像

我们决定使用上图中的 httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。
  1. docker pull httpd
复制代码
下载完成,使用镜像
  1. docker run httpd
复制代码
删除镜像
  1. docker rmi hello-world
复制代码
创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像
  • 2、使用 Dockerfile 指令来创建一个新的镜像
更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。
  1. docker run -i -t ubuntu:15.10 /bin/bash
复制代码
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。
此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。
  1. docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
复制代码
各个参数说明:

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • e218edb10161:容器 ID
  • runoob/ubuntu:v2: 指定要创建的目标镜像名
我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2
  1. docker images
复制代码
使用我们的新镜像 runoob/ubuntu 来启动一个容器
  1. docker run -t -i runoob/ubuntu:v2 /bin/bash  
复制代码
构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
  1. cat Dockerfile
  2. FROM    centos:6.7
  3. MAINTAINER      Fisher "fisher@sudops.com"
  4. RUN     /bin/echo 'root:123456' |chpasswd
  5. RUN     useradd runoob
  6. RUN     /bin/echo 'runoob:123456' |chpasswd
  7. RUN     /bin/echo -e "LANG="en_US.UTF-8"" >/etc/default/local
  8. EXPOSE  22
  9. EXPOSE  80
  10. CMD     /usr/sbin/sshd -D
复制代码
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
  1. docker build -t runoob/centos:6.7 .
复制代码
参数说明:

  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
我们可以使用新的镜像来创建容器
  1. docker run -t -i runoob/centos:6.7  /bin/bash
复制代码
设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。
  1. docker tag 860c279d2fec runoob/centos:dev
复制代码
使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。
打包镜像
  1. # 查看镜像的id
  2. docker images
  3. # 打包
  4. docker save -o xxx.tar images_id
  5. #复制到要部署的服务器上
  6. # 加载
  7. docker load < xxx.tar
复制代码
导出和导入容器
  1. docker export 1e560fca3906 > ubuntu.tar
复制代码
导出容器 1e560fca3906 快照到本地文件 ubuntu.tar
导入容器快照
  1. cat docker/ubuntu.tar | docker import - test/ubuntu:v1
复制代码
删除容器
  1. docker rm -f 1e560fca3906
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表