Docker 基本操作

hello-world

~/temp> docker run busybox echo hello world
hello world

列出正在运行的容器

~/temp> docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
31b9615cac58        ubuntu              "top"               47 minutes ago      Up 47 minutes                           myUbuntu

列出所有的容器

~/temp> docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                      PORTS               NAMES
12342e204079        busybox                 "echo hello world"       58 seconds ago      Exited (0) 56 seconds ago                       boring_dijkstra
31b9615cac58        ubuntu                  "top"                    47 minutes ago      Up 47 minutes                                   myUbuntu

列出所有的image

~/temp> docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
myubuntu                v3                  1ac1036544b4        22 minutes ago      130 MB
ubuntu-beta             v2                  10735e1c8f3a        43 minutes ago      130 MB
ubuntu1                 v1                  10735e1c8f3a        43 minutes ago      130 MB

删除本地的image

docker rmi busybox

在后台运行docker容器

docker run命令的-d选项

~/temp> docker run -d -p 1234:1234 python:2.7 python -m SimpleHTTPServer 1234
ec47e43d9bfa4b2b828a0582f80c8d2e7ce60e16320547767bfdb145fd74b248
~/temp> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ec47e43d9bfa        python:2.7          "python -m SimpleH..."   5 seconds ago       Up 4 seconds        0.0.0.0:1234->1234/tcp   flamboyant_visvesvaraya
~/temp>

连接到后台运行的docker容器

~/temp> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
ec47e43d9bfa        python:2.7          "python -m SimpleH..."   About a minute ago   Up About a minute   0.0.0.0:1234->1234/tcp   flamboyant_visvesvaraya
~/temp> docker exec -ti ec47e43d9bfa /bin/bash
root@ec47e43d9bfa:/#

但用户操作完成以后,就可以使用Ctrl+P+Q快捷键退出容器,使用这个快捷键退出以后,容器不会停止

创建,启动,停止,删除容器

使用docker create命令用来创建一个容器,此时容器的状态是stoped。
从docker的角度来说,create命令就是以image为模板创建一个容器,并且在容器的文件层的最上面增加一层读写层,容器中
所有发生的数据变化都会被保存在最上面的读写层中。

~/temp> docker create -P --expose=1234 python:2.7 python -m SimpleHTTPServer 1234
9c02939d8ec2b47e69a8a5f40e4b0d24ce52c3801bfa1c0e3fab1126a1942268
~/temp> docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                       PORTS               NAMES
9c02939d8ec2        python:2.7              "python -m SimpleH..."   6 seconds ago       Created                                          cranky_bell
~/temp> docker start 9c02939d8ec2
9c02939d8ec2
~/temp> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
9c02939d8ec2        python:2.7          "python -m SimpleH..."   4 minutes ago       Up 18 seconds       0.0.0.0:32768->1234/tcp   cranky_bell
~/temp> docker restart 9c02939d8ec2
9c02939d8ec2
~/temp> docker stop 9c02939d8ec2
9c02939d8ec2
~/temp> docker kill 9c02939d8ec2
Error response from daemon: Cannot kill container 9c02939d8ec2: Container 9c02939d8ec2b47e69a8a5f40e4b0d24ce52c3801bfa1c0e3fab1126a1942268 is not running

查看docker 端口

~/temp> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
9c02939d8ec2        python:2.7          "python -m SimpleH..."   4 minutes ago       Up 18 seconds       0.0.0.0:32768->1234/tcp   cranky_bell
~/temp> docker port 9c02939d8ec2
1234/tcp -> 0.0.0.0:32768
~/temp> curl -I http://localhost:32768/
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.13
Date: Sat, 01 Apr 2017 09:50:05 GMT
Content-type: text/html; charset=UTF-8
Content-Length: 768

删除所有的容器

如果你有很多stopped状态的容器,你想一次性把它们全部删除,那么久可以使用下面的命令:

docker rm `docker ps -a -q`

其中-q选项使得docker ps命令仅仅返回容器id

使用Dockerfile构建image

docker在build一个image的时候需要读取一个配置文件,一般情况下这个文件名称都是Dockerfile,但是也可以使用其他的文件名。

~/temp> ls
Dockerfile-beta
~/temp>
~/temp>
~/temp> docker build -t ubuntu-beta:v2  -f ./Dockerfile-beta .
Sending build context to Docker daemon 2.048 kB
Step 1/2 : FROM ubuntu
 ---> 0ef2e08ed3fa
Step 2/2 : LABEL a 1
 ---> Using cache
 ---> 10735e1c8f3a
Successfully built 10735e1c8f3a
~/temp>
~/temp>
~/temp> docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
ubuntu-beta             v2                  10735e1c8f3a        5 minutes ago       130 MB

容器和主机之间双向复制文件

cp命令可以用来在容器和主机之间双向复制文件。以下的2个命令分别是从容器中往主机复制文件和从主机中复制文件到容器中:

docker cp ubuntu:/root/file.txt .
docker cp file.txt ubuntu:/root/file.txt.bak

基于容器创建image

通过docker commit命令,用户可以以某个容器为基础,保存为一个新的image,同时也可以调整这个image的某些参数。
比如假设现在有一个正在运行的容器myUbuntu, 我们想以这个容器为基础,增加一个环境变量,然后保存为另外一个image。

~/temp> docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
31b9615cac58        ubuntu              "top"               26 minutes ago      Up 26 minutes                           myUbuntu
~/temp> docker commit --change "ENV DEBUG true" myUbuntu myubuntu:v3
sha256:1ac1036544b427a2d81d501899bdcc04368331d46f848fad6a3925490f4d6f4e
~/temp> docker inspect -f "{{.Config.Env}}" myUbuntu
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
~/temp> docker inspect -f "{{.Config.Env}}" 1ac1036544b427a2d81d501899bdcc04368331d46f848fad6a3925490f4d6f4e
[DEBUG=true PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
~/temp> docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
myubuntu                v3                  1ac1036544b4        3 minutes ago       130 MB

在使用docker commit的时候,也可以使用-m选项,这个参数可以用来提交一个comment备注信息,类似于git commit -m一样。
另外还有一个需要注意的参数就是-p,默认情况下,在执行commit操作的时候,容器内所有的进程都是处于pause状态的,如果
此处这个容器还在对外提供服务,比如web程序,那么使用这个容器的其他服务会收到影响。但是我们可以使用-p=false来通知
docker Daemon,使得在执行commit的时候保持容器内的进程继续工作。

下载image到本地

docker pull mysql:latest

登录到docker hub,登出

docker login
docker logout
本文版权归作者所有,禁止一切形式的转载,复制等操作
赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注