ywg 发表于 2019-2-20 09:43:13

docker入门之简单的容器使用

docker入门之简单的容器使用
  首发:arppinging

一、运行容器

1)搜索和下载镜像
  在之前我们打过一个比分,容器就像vmware workstation一样,而镜像类似于一个OVA文件,如果我们想让容器变得有意义,那镜像是我们必不可少的一个"货物"。
  跟OVA文件类似,如果我们基于某一个镜像创建容器,那么在容器里面的任何操作不会被写入原本的镜像,除非对所有的操作进行一次镜像重构,把所有操作的结果导出形成一个新的镜像。

1.1 搜索需要的镜像
  格式:docker search xxx
docker search:查找镜像。使用命令查找的镜像比较少,如有需要,可以进入dockerhub.com查找。

# docker search nginx
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                                Official build of Nginx.                        10502                              
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1483                                    
richarvey/nginx-php-fpm                              Container running Nginx + PHP-FPM capable of…   660                                    
jrcs/letsencrypt-nginx-proxy-companion               LetsEncrypt container to use with nginx as p…   450                                    
kong                                                   Open-source Microservice & API Management la…   257                              
webdevops/php-nginx                                    Nginx with PHP-FPM                              118                                    
kitematic/hello-world-nginx                            A light-weight nginx container that demonstr…   113                                    
zabbix/zabbix-web-nginx-mysql                        Zabbix frontend based on Nginx web-server wi…   81                                    
bitnami/nginx                                          Bitnami nginx Docker Image                      59                                    
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          47                                    
linuxserver/nginx                                    An Nginx container, brought to you by LinuxS…   44                                    
tobi312/rpi-nginx                                    NGINX on Raspberry Pi / armhf                   23                                    
nginx/nginx-ingress                                    NGINX Ingress Controller for Kubernetes         13                                    
blacklabelops/nginx                                    Dockerized Nginx Reverse Proxy Server.          12                                    
wodby/drupal-nginx                                     Nginx for Drupal container image                11                                    
centos/nginx-18-centos7                              Platform for running nginx 1.8 or building n…   8                                       
nginxdemos/hello                                       NGINX webserver that serves a simple page co…   8                                       
centos/nginx-112-centos7                               Platform for running nginx 1.12 or building …   5                                       
1science/nginx                                       Nginx Docker images that include Consul Temp…   4                                       
mailu/nginx                                          Mailu nginx frontend                            2                                       
pebbletech/nginx-proxy                                 nginx-proxy sets up a container running ngin…   2                                       
travix/nginx                                           NGinx reverse proxy                           2                                       
toccoag/openshift-nginx                              Nginx reverse proxy for Nice running on same…   1                                       
ansibleplaybookbundle/nginx-apb                        An APB to deploy NGINX                        0                                       
wodby/nginx                                          Generic nginx                                 0                                       
#
  以上就是查找nginx镜像的结果,以下是个字段的介绍:
NAME:镜像名。xxx/nignx -- xxx用户的nginx镜像,没有用户名的一般都是官方镜像。
DESCRIPTION:描述
STARS:用户评价
OFFICIAL:是否为官方镜像
AUTOATED:自动构建的

1.2 下载镜像
  格式:docker image pull xxx:tag
  有些镜像经过多次的修改,有很多的版本tag。在不指定版本的情况下,会自动下载最新的版本。

    # docker image pull nginx:1.14-alpine
1.14-alpine: Pulling from library/nginx
4fe2ade4980c: Pull complete
c691664ebb08: Pull complete
a6f6a50701b6: Pull complete
5980ba3b5a39: Pull complete
Digest: sha256:75cf17cdf89cbd8da65c83050ebdab1026b98cf217442d6a1f2a8892f47967d7
Status: Downloaded newer image for nginx:1.14-alpine
#
  不指定版本下载

# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
90e01955edcd: Pull complete
Digest: sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812
Status: Downloaded newer image for busybox:latest
#
1.3 查看已有的镜像
  格式:docker image ls

# docker image ls
REPOSITORY          TAG               IMAGE ID            CREATED             SIZE
nginx               1.14-alpine         77bae8d00654      4 weeks ago         17.7MB
redis               4-alpine            05097a3a0549      2 months ago      30MB
busybox             latest            59788edf1f3e      2 months ago      1.15MB
#
2)创建和运行容器

2.1 创建容器
  格式:docker container create image
  基于nginx:1.14-alpine镜像创建一个名为nginx_web1的容器。

# docker container create --name web_nginx nginx:1.14-alpine
a1146d1371979a4f4bccb5ada33d072b983b13cef7cb7d86af97dd149aa3fc6b
  更多选项和命令可查docker使用手册。

2.2 查看容器
  格式:docker container list -a

# docker container list -a
CONTAINER ID      IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
a1146d137197      nginx:1.14-alpine   "nginx -g 'daemon of…"   15 seconds ago      Created                                           web_nginx
2.3 运行容器
  格式:docker container start CONTAINER
  启动web_nginx容器

# docker container start web_nginx
web_nginx
#
2.4 进入容器
  格式:docker exec container
常用opiton:
-t:附加终端
-i:交互式访问
  进入容器交互式sh界面

# docker exec -it web_nginx /bin/sh
/ # ls
bin    dev    etc    home   lib    mediamnt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ #
/ # ip add
1: lo:mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
24: eth0@if25:mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # ps aux
PID   USER   TIMECOMMAND
1 root      0:00 nginx: master process nginx -g daemon off;
6 nginx   0:00 nginx: worker process
12 root      0:00 /bin/sh
18 root      0:00 ps aux
/ #
  在docker服务器上访问docker上的nginx网页

# curl 172.17.0.2



Welcome to nginx!

body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}



Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.


#
2.5 查看容器的状态
  格式:docker ps
  常用option:
-a:所有的
  查看正在运行的容器

# docker ps
CONTAINER ID      IMAGE               COMMAND                  CREATED             STATUS            PORTS               NAMES
a1146d137197      nginx:1.14-alpine   "nginx -g 'daemon of…"   17 minutes ago      Up 8 minutes      80/tcp            web_nginx
#
3)更加简便的方式
  以上是标准的创建容器、启动容器、进入容器的步骤。但是步骤比较繁琐,在docker中,还有一种更加便捷的使用容器的方式,那就是docker run。
  docker run不仅能一次性创建、启动、进入容器,而且当镜像不存在的时候,还会自动下载镜像,然后再基于镜像创建容器。
  格式:docker run IMAGE
常用option:
--name:容器名字
-i:交互式访问
-t:附加终端
-d:后台运行

3.1 创建和启动容器
  使用docker run命令创建和启动一个名为web1_nginx的容器

# docker run --nameweb1_nginx -d nginx:1.14-alpine
e4e2b8be9d575abeae83274b74f458ccee3379b0ee8c793ae50f6aa69f836e80
#
3.2 查看容器的详细信息
  格式:docker inspect containername

# docker inspect web1_nginx
[
{
"Id": "e4e2b8be9d575abeae83274b74f458ccee3379b0ee8c793ae50f6aa69f836e80",
"Created": "2018-12-08T11:10:18.774695021Z",
"Path": "nginx",
"Args": [
"-g",
"daemon off;"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 5791,
"ExitCode": 0,
"Error": "",
"StartedAt": "2018-12-08T11:10:19.146125066Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:77bae8d0065423e2338884d3698ef5ff9de8dec05a55dc81cf48ae9e78008b3f",
"ResolvConfPath": "/var/lib/docker/containers/e4e2b8be9d575abeae83274b74f458ccee3379b0ee8c793ae50f6aa69f836e80/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/e4e2b8be9d575abeae83274b74f458ccee3379b0ee8c793ae50f6aa69f836e80/hostname",
"HostsPath": "/var/lib/docker/containers/e4e2b8be9d575abeae83274b74f458ccee3379b0ee8c793ae50f6aa69f836e80/hosts",
"LogPath": "/var/lib/docker/containers/e4e2b8be9d575abeae83274b74f458ccee3379b0ee8c793ae50f6aa69f836e80/e4e2b8be9d575abeae83274b74f458ccee3379b0ee8c793ae50f6aa69f836e80-json.log",
"Name": "/web1_nginx",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "shareable",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/asound",
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/e4a3721bd14332ca2dc141329145225948c10996a5f97b241f294684d3523d89-init/diff:/var/lib/docker/overlay2/69eb3722a2c91d1c958d6bce3f7ed6cc655bda3e2109e37935c436f4ee2cb812/diff:/var/lib/docker/overlay2/934f065c79fbae15243e93d47842844769fe7c66aa0dbc32a2f6eeb15903e419/diff:/var/lib/docker/overlay2/e9d7067494ef1fb51b5881fcda1a9a1fa2c7e8ede5679ee8d22b0d3c7cd12b93/diff:/var/lib/docker/overlay2/3b67f01d17ef6c823e57268a589d45653141740eb183dcb3cde5868d55b9faf5/diff",
"MergedDir": "/var/lib/docker/overlay2/e4a3721bd14332ca2dc141329145225948c10996a5f97b241f294684d3523d89/merged",
"UpperDir": "/var/lib/docker/overlay2/e4a3721bd14332ca2dc141329145225948c10996a5f97b241f294684d3523d89/diff",
"WorkDir": "/var/lib/docker/overlay2/e4a3721bd14332ca2dc141329145225948c10996a5f97b241f294684d3523d89/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "e4e2b8be9d57",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.14.1"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"ArgsEscaped": true,
"Image": "nginx:1.14-alpine",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers "
},
"StopSignal": "SIGTERM"
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "b079c526decde91c7f776dda3d0811a92842b6e1600148d71ca7ff0659d5df5b",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"80/tcp": null
},
"SandboxKey": "/var/run/docker/netns/b079c526decd",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "2603be0a10b32ac76de23b6ba1e48f2ab8916569efcae18f7c29af58a6ecde53",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "54eb4006f6f6e37274e853f6ce8dfc268913e399ddc57e2e3a5325f2369f03bc",
"EndpointID": "2603be0a10b32ac76de23b6ba1e48f2ab8916569efcae18f7c29af58a6ecde53",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
#
3.3 获取容器中的网页

# curl 172.17.0.2



Welcome to nginx!

body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}



Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.


#
二、停止、恢复、关闭和删除容器

1)停止和恢复容器
  停止容器类似于虚拟机的挂起。
  停止格式:docker container pause CONTAINER
恢复格式:docker container unpause CONTAINER

1.1 查看容器状态
  格式:docker container ps

# docker container ps
CONTAINER ID      IMAGE               COMMAND                  CREATED             STATUS            PORTS               NAMES
e4e2b8be9d57      nginx:1.14-alpine   "nginx -g 'daemon of…"   11 minutes ago      Up 11 minutes       80/tcp            web1_nginx
#
1.2 停止容器
  格式:docker container pause CONTAINER
  停止web1_nginx容器

# docker container pause web1_nginx
web1_nginx
#
  查看容器状态,可看到status上标注着paused

# docker container ps
CONTAINER ID      IMAGE               COMMAND                  CREATED             STATUS                   PORTS               NAMES
e4e2b8be9d57      nginx:1.14-alpine   "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes (Paused)   80/tcp            web1_nginx
#
  测试容器是否在运行,会发现无法获取网页信息。(ps.但ping得通...不知道咋回事,知道的兄弟的可否告知一下。)

# curl 172.17.0.2

1.3 恢复容器
  格式:docker container unpause CONTAINER
恢复web1_nginx容器

# docker container unpause web1_nginx
web1_nginx
#
  查看容器状态

# docker container ps
CONTAINER ID      IMAGE               COMMAND                  CREATED             STATUS            PORTS               NAMES
e4e2b8be9d57      nginx:1.14-alpine   "nginx -g 'daemon of…"   21 minutes ago      Up 21 minutes       80/tcp            web1_nginx
#
  获取容器中的网页信息

# curl 172.17.0.2



Welcome to nginx!

body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}



Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.


#
2)关闭容器
  关闭容器的方式有两种,一种是正常关闭,一种是关闭

2.1 关闭容器
  格式:docker container stop CONTAINER
关闭web1_nginx容器

# docker container stop web1_nginx
web1_nginx
2.2 查看容器状态
  查看容器状态,此时ps查看不到已经关闭的容器信息,需要使用-a参数

# docker container ps
CONTAINER ID      IMAGE               COMMAND             CREATED             STATUS            PORTS               NAMES
# docker container ps -a
CONTAINER ID      IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
e4e2b8be9d57      nginx:1.14-alpine   "nginx -g 'daemon of…"   27 minutes ago      Exited (0) 9 seconds ago                     web1_nginx
#
  可以看到status为exited
  验证容器是否关闭,发现无法ping通

# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
From 172.17.0.1 icmp_seq=10 Destination Host Unreachable
From 172.17.0.1 icmp_seq=11 Destination Host Unreachable
From 172.17.0.1 icmp_seq=12 Destination Host Unreachable
2.3 启动容器
  启动已经关闭的web1_nginx容器

# docker container start web1_nginx
web1_nginx
#
  验证容器是否开启

# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.076 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.062 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.062 ms
^C
--- 172.17.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.062/0.066/0.076/0.011 ms
#
2.4 强制关闭容器
  格式:docker container kill CONTAINER
  强制关闭web1_nginx容器

# docker container kill web1_nginx
web1_nginx
#
  查看和验证容器是否被关闭

# docker container ps -a
CONTAINER ID      IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
e4e2b8be9d57      nginx:1.14-alpine   "nginx -g 'daemon of…"   39 minutes ago      Exited (137) 56 seconds ago                     web1_nginx
# ping 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
^C
--- 172.16.0.2 ping statistics ---
65 packets transmitted, 0 received, 100% packet loss, time 63999ms
#
3)删除容器

3.1 删除容器
  将容器删除,容器处于关闭状态时才能被删除
格式:docker container rm CONTAINER

# docker container rm web1_nginx
web1_nginx
#
  查看容器列表,发现容器web1_nginx容器已消失

# docker container ls -a
CONTAINER ID      IMAGE               COMMAND             CREATED             STATUS            PORTS               NAMES
# docker container ps -a
CONTAINER ID      IMAGE               COMMAND             CREATED             STATUS            PORTS               NAMES
#


页: [1]
查看完整版本: docker入门之简单的容器使用