主要是docker使用命令
sudo docker daemon -H tcp://0.0.0.0:2375 这条命令将docker守护进程 //使用docker_host环境变量 export DOCKER_HOST = "tcp:0.0.0:2375`
sudo status docker //sudo service docker status
sudo stop docker //sudo service docker stop sudo start docker //sudo service docker start
sudo docker info
sudo docker run -i -t ubuntu /bin/bash //-i标记保证容器是STDIN开启的 //-t标记告诉docker要建立的容器分配一个伪tty终端 //ubuntu 指定镜像 // /bin/bash告诉docker容器要运行什么命令
docker默认为建立的容器生成一个随机的名称,可经过--name标记来给容器命名html
sudo docker run --name myName -i -t ubuntu /bin/bash
sudo docker start myName //也可经过id指定 //也可以使用docker restart命令
docker容器从新启动的时候,会沿用docker run
命令时指定的参数来运行,所以上例中从新启动会运行一个交互式的shell,此外也能够用docker attach
从新附着到该容器的会话上nginx
sudo docker attach myName //也可经过id指定
除了交互式运行的容器,也能够建立长期运行的容器,守护式容器没有交互式会话,很是适合运行应用程序和服务。git
sudo docker run --name daemon_name -d ubuntu /bin/sh -c "while true; do echo hello world;sleep 1;done" //-d 标记docker将容器放在后台运行 //while循环一直打印hello world
docker ps //查看正在运行的容器 docker ps -a //查看全部的容器
docker logs daemon_name //获取容器的日志,可经过-f来追踪日志
docker1.6开始,可经过--log-driver
选项来控制docker守护线程和容器全部的日志驱动,能够在执行docker守护线程或者执行docker run
命令时使用这个选项。github
sudo docker run --log-driver="syslog" --name daemon_name -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" //将daemon_name容器的日志输出到syslog,致使docker logs命令不会输出任何东西
sudo docker top daemon_name
sudo docker exec -d daemon_name touch /etc/new_config_file //-d 标记运行一个后台进程 后面明智执行名气的名字以及执行的命令 sudo docker exec -t -i daemon_name /bin/bash //建立TTY并捕捉STDIN
sudo docker stop daemon_name
sudo docker inspect daemon_name //查看更多容器的信息 //该命令也可用来查看镜像信息
sudo docker rm 80430f8d0921 //经过指定容器id //删除所有容器 sudo docker rm `sudo docker ps -a -q` //-q标记表示只返回容器的id
sudo docker images //本地镜像都保存在docker宿主机的/var/lib/docker目录i西安,每一个镜像都保存在docker所采用的存储驱动目录下面,如aufs或者devicemapper,也能够在/var/bin/docker/containers目录下看到全部容器
sudo docker pull ubuntu:12.04
sudo docker run -t -i --name new_container ubuntu:12:04 /bin/bash
能够经过docker search
命令来查找全部docker hub
上公共的可用镜像web
sudo docker search puppet NAME DESCRIPTION STARS OFFICIAL AUTOMATED puppet/puppetserver A Docker Image for running Puppet Server. Wi… 75 alekzonder/puppeteer GoogleChrome/puppeteer image and screenshots… 51 [OK]
如今并不推荐使用docker commit命令,而应该使用更灵活、更强大的dockerfile来构建docker镜像docker
通常来讲都是基于已有的基础镜像,而不是“建立”新镜像,从0开始能够参考:https://docs.docker.com/develop/develop-images/baseimages/shell
建立完镜像以后,能够将镜像推送到docker hub或者私有的registryzhong,完成这个操做须要在docker hub上建立一个帐号。
https://hub.docker.com/signupapache
sudo docker login Username: Password: Login Succeeded
//建立一个新容器 sudo docker run -i -t ubuntu /bin/bash //在容器内部安装一些软件... //获得刚刚建立容器的id docker ps -l -q 9649de16bffb //提交定制容器 sudo docker commit 9649de16bffb dack/apache2 //检查新建立的镜像 docker images dack/apache2 REPOSITORY TAG IMAGE ID CREATED SIZE dack/apache2 latest 2c5cd556c3f2 About a minute ago 209MB
也能够在提交镜像时指定更多的数据(包含标签)来详细描述所作的修改ubuntu
sudo docker commit -m "A new custom image" -a "dack huang" 9649de16bffb dack/apache2:webserver //-m 提交信息 //-a 做息信息 //dack/apache2:webserver 执行镜像的用户名和仓库名,并为该镜像增长一个webserver的标签
并不推荐用docker commit
构建镜像,相反推荐使用Dockerfile
的定义文件和docker build
来构建镜像缓存
Dockerfile
使用基本的基于DSL(Domain Specific Language)
语法的指令来构建一个docker
镜像,对比docker commit
,其更具有可重复性、透明性和幂等性。
保存Dockerfile
的目录称为上下文,docker
会在构建镜像时将构建的上下文和该上下文的文件和目录上传到docker
守护进程。这样docker
守护进程就能够直接访问用户想在镜像中存储的任何代码、文件或者其余数据。
dockerfile
中每条指令从上到下依次执行,大致的流程以下:
因此尽管某一步执行失败了,仍是获得一个可使用的镜像
# Version : 0.01 FROM ubuntu:14.04 MAINTAINER dack huang "dack_huang@163.com" RUN apt-get update && apt-get install -y nginx RUN echo 'Hi, I am in your container' \ >/usr/share/nginx/html/index.html EXPOSE 80 FROM //指定基础镜像 MAINTAINER //指定镜像做者 RUN //在当前镜像中运行的命令,默认在shell里面使用/bin/sh -c执行 EXPOSE //应用程序会使用容器指定的接口
经过docker build
构建镜像
docker build -t="dack/static_web" //-t设置镜像标签 //从git仓库上面构建镜像 //假设这个git仓库存在Dockerfile docker build -t="dack/static" git@github.com:dack/docker-static_web
docker将每一步的构建过程都提交为镜像,因此docker会将以前的镜像层当作缓存,当修改某个步骤以后再次构建的,docker会直接从该步骤开始。
可用docker build --no-cache
略过缓存
docker build --no-cache -t="dack/static_web"
docker history
查看镜像的每一层
[root@dack static_web]# docker history e5f55354c141 IMAGE CREATED CREATED BY SIZE COMMENT e5f55354c141 5 hours ago /bin/sh -c #(nop) EXPOSE 80 0B 66d44cca6536 5 hours ago /bin/sh -c echo 'Hi, I am in your container'… 27B 022c0b46f4f8 5 hours ago /bin/sh -c apt-get update && apt-get install… 34.3MB 34d2d2b790f5 5 hours ago /bin/sh -c #(nop) MAINTAINER dack huang "da… 0B 390582d83ead 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 3 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B