Chinaunix首页 | 论坛 | 博客
  • 博客访问: 402091
  • 博文数量: 112
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 800
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-29 13:41
文章分类

全部博文(112)

文章存档

2020年(1)

2018年(10)

2017年(27)

2016年(18)

2015年(31)

2014年(25)

分类: 虚拟化

2017-11-01 17:39:25

一、Docker commit 扩展一个image

点击(此处)折叠或打开

  1. 用ubuntu image启动容器,命名为python
  2. root@ubuntu:/home/ubuntu# docker run -it --name=python ubuntu
  3. root@0fbfdb49736c:/#
  4. root@0fbfdb49736c:/# apt-get update
  5. root@0fbfdb49736c:/# apt-get install python
  6. #创建一个安装有python镜像
  7. root@ubuntu:/home/ubuntu# docker commit -m "adde python env" -a "Song" 0fbfdb49736c ubuntu:python
  8. sha256:8cfa410e193b988237c2d4be6be25f2a0a8225f236ee96a521c71d9063455a9f
  9. #-m 指定提交的说明信息
  10. #-a 指定更新用户的信息
  11. #0fbfdb49736c指创建镜像的容器ID
  12. #ubuntu:python 指定目标镜像仓库名和tag信息
  13. root@ubuntu:/home/ubuntu# docker images
  14. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  15. ubuntu              python              8cfa410e193b        26 seconds ago      194MB
  16. ubuntu              latest              747cb2d60bbe        3 weeks ago         122MB
  17. centos              latest              196e0ce0c9fb        6 weeks ago         197MB
  18. hello-world         latest              05a3bd381fc2        7 weeks ago         1.84kB
  19. #使用刚创建的镜像启动容器
  20. root@ubuntu:/home/ubuntu# docker run -it ubuntu:python /bin/bash
  21. #不加-v 启动的容器,退出后消失,docker ps查看不到
  22. root@61b276240041:/# python -V
  23. Python 2.7.12
  24. #运行镜像
  25. root@ubuntu:/# mkdir -p docker/nginx
  26. root@ubuntu:/# echo "Hello Nginx in Docker" > docker/nginx/index.html
  27. root@ubuntu:/# docker run --name="my_nginx" -v /docker/nginx:/usr/share/nginx/html -d nginx
  28. -v 挂载卷,退出时,容器不关闭,docker ps可以查看的到,把本地宿主机目录挂载到容器内指定目录,容器内目录不存在会自动创建(宿主机目录(/docker/nginx):容器内目录(/usr/share/nginx/html)可以指定权限(:ro/rw),默认为rw)。
  29. -d 以守护进程daemon方式放到后台运行。
  30. 97a414199622854812faf60770429f0a022d5b816762392d9311f83330ee2c48
  31. root@ubuntu:/# docker ps
  32. CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
  33. 97a414199622        nginx               "nginx -g 'daemon ..."   23 seconds ago      Up 22 seconds       80/tcp              my_nginx
  34. #在容器内访问nginx页面
  35. #进入容器
  36. #exec指在运行中的容器运行命令/bin/bash
  37. root@ubuntu:/# docker exec -it 97a414199622 /bin/bash
  38. root@97a414199622:/# apt-get update
  39. root@97a414199622:/# apt-get install curl
  40. root@97a414199622:/# curl
  41. Hello Nginx in Docker
  42. root@ubuntu:/# docker exec -it 97a414199622 curl
  43. Hello Nginx in Docker

二、Dockerfile创建image
docker build dockerfile

点击(此处)折叠或打开

  1. dockerfile指令说明:
  2. #FROM  指使用Docker哪个镜像(image)作为基础
  3. #MAINTAINER  是维护者的信息
  4. #RUN  指会在创建容器中运行,这里运行apt-get
  5. #CMD  指定容器启动时执行的命令,每个Dockerfile只能有一条CMD命令。如果用户在启动容器时附加了运行命令,将会覆盖掉CMD指定的命令。例:CMD ["/bin/bash"], CMD ["echo","hello world"]
  6. #EXPOSE  指定Docker容器开放的端口号。
  7. #ENV  指定环境变量。
  8. #ADD  将主机环境中的指定的文件或目录复制到容器中的。 ADD 源地址 目标地址
  9. #ENTRYPOINT  与CMD类似,它可以指定容器启动时要执行的命令,如果dockerfile中有CMD指令,CMD中的参数会被附加到ENTRYPOINT指令的后面。如果docker run命令带了参数,这个参数会覆盖掉DMC指令的参数,并附加到ENTRYPOINT指令的后面。docker run --entrypoint会覆盖掉ENTRYPOINT指令。例:ENTRYPOINT ["pwd"]
  10. #WORKDIR  指定容器的一个目录,容器启动时执行的命令会在该目录下执行。docker run -w会覆盖掉WORKDIR指令。例:WORKDIR /myhome
  11. #ENV  在镜像构建过程中设置环境变量。ENV MYHOME /myhome
  12. #USER  指定容器执行程序的用户身份,默认是root。docker run -u 会覆盖掉USER指令。
  13. #COPY  类似于ADD指令,COPY指令不会自动解压工作。
  14. #ONBUILD  为镜像添加触发器。例:ONBUILD RUN mkdir myhome 构建一个镜像A,再由镜像A构建一个镜像B,这样ONBUILD在构建镜像B中被触发,镜像B中容器的根目录下会创建myhome目录。
  15. #VOLUME  设置一个挂载点(可以从本地主机或其它容器),并将主机上的挂载目录关联到容器的目录,用来存放数据。VOLUME ["/data
  16. 1","/data2"]

  17. #使用Dockerfile创建一个安装有php的镜像
  18. root@ubuntu:~# mkdir -p /docker/php
  19. root@ubuntu:~# cd /docker/php
  20. root@ubuntu:/docker/php# vim Dockerfile
  21. 内容如下:
  22. #This is a comment
  23. FROM ubuntu:latest
  24. MAINTAINER Song
  25. RUN apt-get update
  26. RUN apt-get apr apr-util
  27. RUN apt-get install php -y
  28. root@ubuntu:/docker/php# docker build -t "ubuntu:php" .
  29. Sending build context to Docker daemon  2.048kB
  30. Step 1/4 : FROM ubuntu:latest
  31.  ---> 747cb2d60bbe
  32. Step 2/4 : MAINTAINER Song
  33.  ---> Running in ae6a6922edc0
  34.  ---> 81ae6abf3ea7
  35. #-t 标记添加tag,指定新的镜像的tag信息。
  36. #.”是Dockerfile所在的路径,也可以指定Dockerfile的绝对路径/docker/php/Dockerfile
  37. #Dockerfile中的指令被一条一条执行,每一步都创建了一个新容器,在容器中执行指令并提交修改(同docker commit)。当所有指令执行完毕之后,返回最终的镜像id。执行过程中产生的容器都被删除。*一个镜像不能超过127层*
  38. root@ubuntu:/docker/php# docker images
  39. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  40. ubuntu              php                 e79e5b74a3b2        3 minutes ago       219MB
  41. root@ubuntu:/docker/php#  docker run -it ubuntu:php /bin/bash
  42. root@1e4f0d01c2aa:/# php --version
  43. PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
  44. #修改镜像的标签
  45. root@ubuntu:/docker/php# docker tag 8cfa410e193b ubuntu:python2.7
  46. root@ubuntu:/docker/php# docker images
  47. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  48. ubuntu              python2.7           8cfa410e193b        About an hour ago   194MB
  49. ubuntu              python              8cfa410e193b        About an hour ago   194MB
  50. #

三、本地系统镜像导入和导出

点击(此处)折叠或打开

  1. #在http://download.openvz.org/template/precreated选择所要下载的镜像
  2. root@ubuntu:/docker# wget http://download.openvz.org/template/precreated/debian-8.0-x86_64.tar.gz
  3. root@ubuntu:/docker# cat debian-8.0-x86_64.tar.gz |docker import - debian:8.0
  4. sha256:b8ab0f61adbf4201f9583f35fa5b7d09738a381fd35585ae43b7638f800f58c7
  5. 或者
  6. root@ubuntu:/docker# docker import http://download.openvz.org/template/precreated/debian-8.0-x86_64.tar.gz debian:8.0
  7. root@ubuntu:/docker# docker images
  8. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  9. debian              8.0                 b8ab0f61adbf        51 seconds ago      540MB
  10. ubuntu              php                 e79e5b74a3b2        18 hours ago        219MB
  11. ...


点击(此处)折叠或打开

  1. root@ubuntu:/home/ubuntu# docker ps -a
  2. 2bb8c9a16bbc python "python3" 3 days ago Exited (0) 3 days ago determined_stonebraker
  3. #导出容器id为2bb8c9a16bbc的容器
  4. root@ubuntu:/home/ubuntu# docker export 2bb8c9a16bbc > python.tar




阅读(1089) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~