Docker 常用基本操作

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。


文章目录结构

  1. 安装
  2. 镜像
  3. 容器

1. 安装

1.1CentOS环境安装Docker

官方安装脚本一键安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令

curl -sSL https://get.daocloud.io/docker | sh

1.2 Windows环境安装Docker

待更新…


2.镜像

2.1 获取镜像

docker pull wordpress

2.2 查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/。我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

docker search httpd

2.3 删除镜像

可以删除本地镜像列表中的镜像,以删除wordpress镜像为例:

docker rmi wordpress

2.4 更新镜像

当容器内有变化时,可将这个容器更新成一个新的镜像,可以在本地列表中查看

docker commit -m="update" -a="norsl" e218edb10161 norsl/blog:beta-1.0

-m 更新描述信息

-a 指定镜像作者

e218edb10161 容器ID。可通过 查看容器 看到

norsl/blog:beta-1.0 指定要创建的目标镜像名

2.5 构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

runoob@runoob:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。第一条FROM,指定使用哪个镜像源。RUN 指令告诉docker 在镜像内执行命令,安装了什么。然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

runoob@runoob:~$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
 ---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
 ---> Using cache
 ---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
 ---> Using cache
 ---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......

参数说明:

  • -t  指定要创建的目标镜像名
  • . Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

我们可以使用新的镜像来创建容器

runoob@runoob:~$ docker run -t -i runoob/centos:6.7  /bin/bash
[root@41c28d18b5fb /]# id runoob
uid=500(runoob) gid=500(runoob) groups=500(runoob)

2.6 列出本地镜像列表

docker images 可列出本地所有镜像列表

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
hello-world         latest              690ed74de00f        6 months ago        960 B
training/webapp     latest              6fae60ef3446        11 months ago       348.8 MB

2.7 设置镜像标签

docker tag 860c279d2fec norsl/blog:beta-0.1

3.容器

3.1 启动容器

以 wordpress 最新版镜像启动一个名字为 container-demo 的容器,并把主机的80端口映射到容器的80断口

docker run -itd --name -p 80:80 container-demo wordpress /bin/bash

参数解析:

-i 交互式操作

-t 终端

-d 后台模式运行(容器内exit后,容器不会停止)

/bin/bash 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash

-p 80:3000 主机端口80映射到容器端口3000

-P 容器内部使用的端口映射到主机的随机端口上面

3.2 停止容器

docker stop 860c279d2fec

860c279d2fec 为容器的ID

3.3 启动已停止的容器

docker start 860c279d2fec

3.4 查看容器

docker ps -a
CONTAINER ID        IMAGE               COMMAND             ...                
860c279d2fec        training/webapp     "python app.py"     ...

CONTAINER ID 是容器的ID

IMAGE 是容器所使用的镜像

COMMAND 容器内所执行的命令

3.5 进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach
  • docker exec

推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

下面演示了使用 docker exec 命令:

docker exec -it 243c32535da7 /bin/bash

3.6 删除容器

docker rm -f 1e560fca3906

3.7 导入容器

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

3.8 导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

docker export 1e560fca3906 > ubuntu.tar

3.9 容器日志

runoob@runoob:~$ docker logs -f bf08b7f2cd89
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.239.1 - - [09/May/2016 16:30:37] "GET / HTTP/1.1" 200 -
192.168.239.1 - - [09/May/2016 16:30:37] "GET /favicon.ico HTTP/1.1" 404 -

-f 让docker logs像使用 tail -f 一样来输出容器内部的标准输出。

从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。

持续更新中…

部分内容来自 菜鸟教程

发表评论

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