一、Docker 容器使用
1、Docker 客户端
docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项
[root@localhost ~]# docker
更深入的了解指定的 Docker 命令使用方法。例如我们要查看 docker stats 指令的具体使用方法:
runoob@runoob:~# docker stats --help
2、运行WEB应用
-d 让容器在后台运行。
-P 将容器内部使用的网络端口映射到我们使用的主机上
[root@localhost ~]# docker pull training/webapp #载入镜像
[root@localhost ~]# docker run -d -P training/webapp python app.py #创建容器保持后台运行,将容器内部使用的网络端口映射到我们使用的主机上
3、查看WEB容器
使用 docker ps 来查看我们正在运行的容器
docker ps -l 可以查看最后一次创建的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f1135116e18 training/webapp "python app.py" About a minute ago Up About a minute 0.0.0.0:32768->5000/tcp jolly_kalam
多了端口信息
PORTS
0.0.0.0:32768->5000/tcp
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上
通过浏览器访问web应用
-p 参数来设置不一样的端口
[root@localhost ~]# docker run -d -p 5000:5000 training/webapp python app.py #容器内部的 5000 端口映射到我们本地主机的 5000 端口上
3dae4929b1854a699d4c2b249761bde0809d517af025c9c308ea264f79962946
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3dae4929b185 training/webapp "python app.py" 9 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp dreamy_germain
1f1135116e18 training/webapp "python app.py" 11 minutes ago Up 11 minutes 0.0.0.0:32768->5000/tcp jolly_kalam
3、网络端口的快捷方式
通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
[root@localhost ~]# docker port 3dae4929b185
5000/tcp -> 0.0.0.0:5000
[root@localhost ~]# docker port dreamy_germain
5000/tcp -> 0.0.0.0:5000
4、查看WEB程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
[root@localhost ~]# docker logs -f 3dae4929b185
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.1.102 - - [04/Apr/2019 15:01:45] "GET / HTTP/1.1" 200 -
192.168.1.102 - - [04/Apr/2019 15:01:45] "GET /favicon.ico HTTP/1.1" 404 -
5、查看WEB应用程序的进程
docker top ID或名字 可以查看容器内部运行的进程
[root@localhost ~]# docker top 3dae4929b185
UID PID PPID C STIME TTY TIME CMD
root 10222 10204 0 22:59 ? 00:00:00 python app.py
6、检查WEB应用程序
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息
[root@localhost ~]# docker inspect 3dae4929b185
[
{
"Id": "3dae4929b1854a699d4c2b249761bde0809d517af025c9c308ea264f79962946",
"Created": "2019-04-04T14:59:52.486361049Z",
"Path": "python",
"Args": [
"app.py"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 10222,
"ExitCode": 0,
"Error": "",
"StartedAt": "2019-04-04T14:59:57.872221605Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
8、重启WEB应用程序
已经停止的容器,我们可以使用命令 docker start 来启动
[root@localhost ~]# docker start 3dae4929b185
二、Docker 镜像使用
1、列出镜像列表
使用 docker images 获取本机镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 9f38484d220f 3 weeks ago 202MB
training/webapp latest 6fae60ef3446 3 years ago 349MB
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下
[root@localhost ~]# docker run -t -i ubuntu:15.10 /bin/bash
root@d77ccb2e5cca:/#
如果要使用版本为14.04的ubuntu系统镜像来运行容器时,命令如下:
[root@localhost ~]#d ocker run -t -i ubuntu:14.04 /bin/bash
root@39e968165990:/#
2、获取新的镜像
当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它
[root@localhost ~]# docker pull ubuntu:13.10
3、查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 2403 [OK]
haproxy HAProxy - The Reliable, High Performance TCP… 1185 [OK]
jruby JRuby (http://www.jruby.org) is an implement… 82 [OK]
steveltn/https-portal A fully automated HTTPS server powered by Ng… 65 [OK]
hypriot/rpi-busybox-httpd Raspberry Pi compatible Docker Image with a … 46
kennethreitz/httpbin A simple HTTP service. 25 [OK]
centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui… 22
geldim/https-redirect Very small (4mb) http to https redirector 15 [OK]
NAME:镜像仓库源的名称
DESCRIPTION:镜像的描述
OFFICIAL:是否docker官方发布
4、创建镜像
我们可以通过以下两种方式对镜像进行更改
1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用 Dockerfile 指令来创建一个新的镜像
5、更新镜像
更新镜像之前,我们需要使用镜像来创建一个容器。
[root@localhost ~]# docker run -it centos /bin/bash
[root@ae3e0d7dce53 /]
在运行的容器内使用 yumt update 命令进行更新。
在完成操作之后,输入 exit命令来退出这个容器。
此时ID为ae3e0d7dce53的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。
[root@ae3e0d7dce53 /]# exit
exit
[root@localhost ~]# docker commit -m="update" -a="root" ae3e0d7dce53 root/centos:v2
sha256:c3d43b8ca69991b90a993123cfd2272c354a5115af284b5f4941fa772b80bf4c
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
root/centos v2 c3d43b8ca699 8 seconds ago 202MB
centos latest 9f38484d220f 3 weeks ago 202MB
training/webapp latest 6fae60ef3446 3 years ago 349MB
[root@localhost ~]#
-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器ID
runoob/ubuntu:v2:指定要创建的目标镜像名
6、构建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
[root@localhost ~]# cat Dockerfile
FROM centos:6.7
RUN /bin/echo 'root:123456' | chpasswd
RUN useradd demo
Run /bin/echo 'demo:123456' | chpasswd
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令
[root@localhost ~]# docker build -t root/centos:6.7 .
Sending build context to Docker daemon 93.8MB
Step 1/4 : FROM centos:6.7
6.7: Pulling from library/centos
cbddbc0189a0: Pull complete
Digest: sha256:fbdc884421f5649d1ca3ae8f7f11bb955dff90879b1602702ab7ea26f9b33757
Status: Downloaded newer image for centos:6.7
---> 9f1de3c6ad53
Step 2/4 : RUN /bin/echo 'root:123456' | chpasswd
---> Running in 7761d93f65fa
Removing intermediate container 7761d93f65fa
---> 4d743ffed81e
Step 3/4 : RUN useradd demo
---> Running in 2f7d61319ba2
Removing intermediate container 2f7d61319ba2
---> da40ec3bc5d2
Step 4/4 : Run /bin/echo 'demo:123456' | chpasswd
---> Running in a27797695a14
Removing intermediate container a27797695a14
---> faf550b0c86a
Successfully built faf550b0c86a
Successfully tagged root/centos:6.7
-t 指定要创建的目标镜像名
. Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
root/centos 6.7 faf550b0c86a 17 seconds ago 191MB
root/centos v2 c3d43b8ca699 14 minutes ago 202MB
centos 6.7 9f1de3c6ad53 3 weeks ago 191MB
centos latest 9f38484d220f 3 weeks ago 202MB
training/webapp latest 6fae60ef3446 3 years ago 349MB
[root@localhost ~]# docker run -it faf550b0c86a /bin/bash
[root@facce6e1c336 /]# id demo
uid=500(demo) gid=500(demo) groups=500(demo)
7、设置镜像标签
使用 docker tag 命令,为镜像添加一个新的标签。
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
demo/centos v2 faf550b0c86a 7 minutes ago 191MB
root/centos 6.7 faf550b0c86a 7 minutes ago 191MB
root/centos v2 c3d43b8ca699 21 minutes ago 202MB
centos 6.7 9f1de3c6ad53 3 weeks ago 191MB
centos latest 9f38484d220f 3 weeks ago 202MB
training/webapp latest 6fae60ef3446 3 years ago 349MB
三、容器连接
1、网络端口映射
端口映射并不是唯一把 docker 连接到另一个容器的方法。
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息
指定容器绑定的网络地址127.0.0.1,通过访问 127.0.0.1:5001 来访问容器的 5000 端口。
docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py
-P :是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口
默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
2、容器命名
创建一个容器的时候,docker 会自动对它进行命名。另外,我们也可以使用 –name 标识来命名容器,例如:
[root@localhost ~]# docker run -d -P --name runoob training/webapp python app.py
43780a6eabaaf14e590b6e849235c75f3012995403f97749775e38436db9a441