Docker使用-容器篇

版权声明:作者-傲娇天子 博文主页地址:https://blog.csdn.net/qq_41116956 欢迎转载,转载请在文章页面明显位置给出原文链接,谢谢 https://blog.csdn.net/qq_41116956/article/details/84825963

上文说到docker的安装,如果你已经成功安装docker,那么就来看下docker的使用吧!


Docker容器:由docker的镜像(images)创建docker容器,所以,我们首先需要一个docker镜像

docker_images

本文以nginx_image为例

1:查询可用nginx_image

[root@www ~]# docker search nginx
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                                  Official build of Nginx.                        10461               [OK]                
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1480                                    [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of…   657                                     [OK]
jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p…   449                                     [OK]
...

2:下拉image,选择第一个并执行docker pull

[root@www ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a5a6f2f73cd8: Pull complete 
1ba02017c4b2: Pull complete 
33b176c904de: Pull complete 
Digest: sha256:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dba
Status: Downloaded newer image for nginx:latest
[root@www ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              568c4670fa80        7 days ago          109MB

创建docker容器

1:创建

[root@www ~]# docker create nginx
b716fa0296d244c6a779c3d488eb06a6e6157c2c20e280ceef82ec91d740a32a

上面显示的数字为容器的ID

2:查询-使用docker ps -a可以查询所以的(启动、未启动)容器(docker ps查询的是启动的容器)

[root@www ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b716fa0296d2        nginx               "nginx -g 'daemon of…"   8 seconds ago       Created                                 trusting_greider

第一行内容:容器的ID(显示部分,不过能匹配容器)、image名称、命令、创建时间和显示当前状态信息最后是容器的名字(创建时生成)

当然,如果想给容器命名,那么在创建时就需要给容器名称:--name 名称

[root@www ~]# docker create --name nginx_1 nginx
71fc124d16795c79353237b95d0251eeca3d15846dd20975d609fe33de96859c
[root@www ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
71fc124d1679        nginx               "nginx -g 'daemon of…"   6 seconds ago       Created                                 nginx_1
b716fa0296d2        nginx               "nginx -g 'daemon of…"   4 minutes ago       Created                                 trusting_greider

容器使用

1:启动容器:docker start 容器

[root@www ~]# docker start nginx_1
nginx_1
[root@www ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
71fc124d1679        nginx               "nginx -g 'daemon of…"   About a minute ago   Up 3 seconds        80/tcp              nginx_1

其中PORTS为nginx的web服务开发的端口(指的是docker容器的ip+端口),但是,docker中的nginx服务一般都会映射到本机端口进行访问(本机ip地址+端口)

所以,我们重新创建一个新容器,使web服务有本机ip地址+端口访问

2:删除原本的容器nginx_1(需要先stop)

[root@www ~]# docker rm nginx_1
nginx_1

3:创建端口映射容器并启动

docker create -P --name nginx_1 nginx
docker start nginx_1

-P:随机映射(将nginx使用的端口随机映射到本地的端口)

[root@www ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                   NAMES
d6f9e99c3e5e        nginx               "nginx -g 'daemon of…"   About a minute ago   Up 49 seconds       0.0.0.0:32768->80/tcp   nginx_1
b716fa0296d2        nginx               "nginx -g 'daemon of…"   3 hours ago          Created                                     trusting_greider

根据PORTS一行:将nginx的80端口映射到本机的32768端口

(docker create + docker start )2条命令=下面一条命令

docker run -P --name nginx_1 nginx

而且,如果没有nginx的image,还会下载相关的images。

在浏览器中访问本机端口

启动错误分析:

错误:...iptables: No chain/target/match by that name...

这是因为端口映射和iptables有关,所以关闭了iptables会报错;而对于Centos7以上,以Firewalls为主,所以关闭Firewalls也会清空iptables里面的规则:

防火墙规则查询:

[root@www ~]# iptables -L

重启docker服务(systemctl restart docker)可以恢复iptables下关于docker的规则。

当然,如果我们不想随机映射端口时,使用 -p 指定映射端口:

docker create -p 10:100 --name nginx_2 nginx
将本地10端口映射到docker中的100端口

启动docker后查询

[root@www ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
2785d49134c2        nginx               "nginx -g 'daemon of…"   16 seconds ago      Up 4 seconds        80/tcp, 0.0.0.0:10->100/tcp   nginx_2

4:查询docker下nginx_1的log

[root@www /]# docker logs nginx_1
192.168.1.126 - - [05/Dec/2018:07:09:47 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)" "-"
2018/12/05 07:09:47 [error] 6#6: *3 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.1.126, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.1.65:32768"
192.168.1.126 - - [05/Dec/2018:07:09:47 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)" "-"
192.168.1.126 - - [05/Dec/2018:07:10:11 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-"
2018/12/05 07:10:13 [error] 6#6: *4 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.1.126, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.1.65:32768", referrer: "http://192.168.1.65:32768/"
192.168.1.126 - - [05/Dec/2018:07:10:13 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.1.65:32768/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-"

5:查询进程信息

[root@www /]# docker top nginx_1
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                16205               16189               0                   15:32               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 16241               16205               0                   15:32               ?                   00:00:00            nginx: worker process

6:查询容器的配置和状态信息

docker inspect nginx_1

7:查询最后创建的容器

 docker ps -l

等等,上面创建了容器,如果我想进入容器怎么办?

8:docker attach 容器名称

[root@www /]# docker attach nginx_1

这个命令可以实现容器的交互,前提是,我们所创建容器有个可以交互的终端。

9:创建交互容器并附属:

[root@www /]# docker create -i -t --name web nginx /bin/bash
b82c0c55400c500ae7060a73e63dff79ca10b7b90e659b61d9fd20b00acbcc13
[root@www /]# docker start web
web
[root@www /]# docker attach web
root@b82c0c55400c:/# 

Ctrl+D或者exit退出附属,需要注意的是,这时候web容器也会关闭

9:后台模式

上面,我们提到快速创建容器,并执行命令:

[root@www /]# docker run -i -t --name web_nginx nginx /bin/echo "hello world"
hello world

当我们需要容器在后台执行时,使用 -d 命令:

[root@www /]# docker run -d --name web_nginx nginx /bin/echo "hello world"

以上就是docker下容器的常用命令

完!

猜你喜欢

转载自blog.csdn.net/qq_41116956/article/details/84825963
今日推荐