上文说到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下容器的常用命令
完!