使用Docker创建NGINX容器

查看已下载的镜像(也就是容器的模板)
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@localhost ~]#
 
 
 
搜索NGINX镜像
[root@localhost ~]# docker search nginx
NAME                                              DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                         18091     [OK]       
bitnami/nginx                                     Bitnami nginx Docker Image                       150                  [OK]
bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   23                   [OK]
ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   77
kasmweb/nginx                                     An Nginx image based off nginx:alpine and in…   4
rancher/nginx-ingress-controller                                                                   11
备注:从“Official build of Nginx.”这句话可以得知,NAME为nginx的镜像是NGINX官方创建的,直接拉取回来使用即可。
 
 
 
拉取NGINX镜像
[root@localhost ~]# docker pull nginx
[root@localhost ~]# docker images # 再次查看已下载的镜像
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    3f8a00f137a0   7 days ago   142MB
[root@localhost ~]#
 
 
 
拉取CentOS镜像(纯净版)
[root@localhost ~]# docker pull docker.io/centos
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    3f8a00f137a0   7 days ago      142MB
centos       latest    5d0da3dc9764   17 months ago   231MB
[root@localhost ~]#
 
 
 
删除镜像
[root@localhost ~]# docker rmi -f 5d0da3dc9764 # 删除ID为5d0da3dc9764的镜像
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    3f8a00f137a0   7 days ago   142MB
[root@localhost ~]#
备注:删除镜像前必须先删除使用该镜像的容器,如果不想删除容器而又想删除镜像可加上-f参数强制删除。
 
 
 
创建NGINX容器并运行(容器配置文件路径:/var/lib/docker/containers/容器ID/config.v2.json)
[root@localhost ~]# docker run --name=docker-nginx-demo -d -p 8083:80 -v /etc/localtime:/etc/localtime:ro nginx:latest
339e418faa179de672e9a7b2aa5ddea3af09c77a799568223d5e23bd481475cd # 容器长ID(64位)
[root@localhost ~]#
备注:镜像名要放在命令最后,且格式为“REPOSITORY:TAG”,如果TAG为latest则可以只写REPOSITORY。
参数说明:
--name=定义容器名称:启动/停止/重启/删除容器等操作都需要指定容器名称
--restart=alway:表示重启Docker时自动运行容器
-d:容器在后台运行
-p:端口映射,格式为“本地服务端口:容器内部端口”,如设置为“8083:80”则可通过“http://IP地址:8083/”来访问
-v:把宿主机目录或文件挂载到容器(实现数据同步),格式为“宿主机目录:容器目录:rw(读写)或ro(只读)”,如“-v /etc/localtime:/etc/localtime:ro”实现容器时间和宿主机的时间同步,需要注意的是容器目录不能为容器根目录,该参数可多次使用
 
 
 
查看正在运行的容器
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS          PORTS                                   NAMES
339e418faa17   nginx     "/docker-entrypoint.…"   41 seconds ago   Up 40 seconds   0.0.0.0:8083->80/tcp, :::8083->80/tcp   docker-nginx-demo
[root@localhost ~]#
备注:可以看到容器docker-nginx-demo已成功运行,此时在浏览器地址栏输入“http://IP地址:8083/”即可访问。
备注:339e418faa17是容器短ID(12位),就是容器长ID(64位)的前12位。


 
进入容器(注意要设置环境参数LANG为C.UTF-8,否则容器内无法使用中文)
[root@localhost ~]# docker exec -it docker-nginx-demo env LANG=C.UTF-8 /bin/bash # 进入名为docker-nginx-demo的容器
root@339e418faa17:/# ls # 列出容器根目录下的文件和目录
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@339e418faa17:/# exit # 退出容器
exit
[root@localhost ~]# 
备注:可以看到容器的目录结构和Linux基本是一致的,在容器内可以使用一些Linux常用命令(当然不可能所有命令都能使用,毕竟只是容器)。
 
 
 
重启系统后容器会停止运行,可用命令查看所有容器
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS                     PORTS     NAMES
339e418faa17   nginx     "/docker-entrypoint.…"   22 minutes ago   Exited (0) 8 minutes ago             docker-nginx-demo
[root@localhost ~]#
备注:可以看到容器docker-nginx-demo的状态为已停止运行(Exited)。
 
 
 
运行容器
[root@localhost ~]# docker start docker-nginx-demo
docker-nginx-demo
[root@localhost ~]# docker stats # 查看容器状态
CONTAINER ID   NAME                CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O   PIDS
339e418faa17   docker-nginx-demo   0.00%     3.152MiB / 1.777GiB   0.17%     10.3kB / 3.79kB   24MB / 0B   3
^C # 按下组合快捷键【Ctrl+C】退出
[root@localhost ~]#
 
 
 
进入容器(注意要设置环境参数LANG为C.UTF-8,否则容器内无法使用中文)
[root@localhost ~]# docker exec -it docker-nginx-demo env LANG=C.UTF-8 /bin/bash # 进入名为docker-nginx-demo的容器
root@339e418faa17:/# apt update # 更新软件包(注意是用apt而不是yum)
root@339e418faa17:/# apt-get install vim # 安装vim编辑器
root@339e418faa17:/# cat /etc/nginx/nginx.conf
……(这是nginx.conf文件的内容)……
root@339e418faa17:/# exit
exit
[root@localhost ~]#
 
 
 
对于已创建好的容器我们可以使用“docker container update”修改运行参数,如上面我们创建容器时忘了加入“--restart=always”参数使Docker重启时可以自动运行容器,那么就可以执行如下命令增加参数:
[root@localhost ~]# docker container update --restart=always docker-nginx-demo
docker-nginx-demo
[root@localhost ~]#
备注:增加“--restart=always”参数后Docker重启就会自动运行容器,不需要再手动执行命令“docker start 容器名称”来运行容器了。
 
 
 
导出容器(实际上就是把容器里的所有文件都打包成*.tar压缩包,可用软件打开压缩包查看)
[root@localhost ~]# docker ps -a --no-trunc # 这里必须加--no-trunc参数,否则无法看到完整的COMMAND
CONTAINER ID                                                       IMAGE          COMMAND                                          CREATED         STATUS                      PORTS     NAMES
339e418faa179de672e9a7b2aa5ddea3af09c77a799568223d5e23bd481475cd   nginx:latest   "/docker-entrypoint.sh nginx -g 'daemon off;'"   5 minutes ago   Exited (0) 22 seconds ago             docker-nginx-demo
[root@localhost ~]# docker export -o /tmp/docker-nginx-demo-1.0.0.tar 339e418faa17 # 导出ID为339e418faa17的容器
[root@localhost ~]#
备注:把*.tar压缩包分发到其它机器然后导入即可,需要注意的是导入容器并不是直接还原容器,而是创建一个镜像,使用该镜像再创建容器并运行即可。
备注:导出容器前务必先查看并记下该容器的COMMAND,在别的机器导入时需要使用。
 
 
 
导入容器
[root@localhost ~]# docker import /tmp/docker-nginx-demo-1.0.0.tar docker-nginx-demo:1.0.0
sha256:4f9557690e1f3972f3873502cc55be0676ed568ce18a016dcb4414226ec2fdbb
[root@localhost ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
docker-nginx-demo   1.0.0     4f9557690e1f   17 seconds ago   140MB
[root@localhost ~]# docker run --name=docker-nginx-demo -d -p 8083:80 -v /etc/localtime:/etc/localtime:ro docker-nginx-demo:1.0.0 /docker-entrypoint.sh nginx -g 'daemon off;'
35b2f1be1e2916ed6db5a05fd6c22f8eddcb1f7a05231532751c73a483ebb6e9
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                     COMMAND                   CREATED          STATUS          PORTS                                   NAMES
35b2f1be1e29   docker-nginx-demo:1.0.0   "/docker-entrypoint.…"   52 seconds ago   Up 51 seconds   0.0.0.0:8083->80/tcp, :::8083->80/tcp   docker-nginx-demo
[root@localhost ~]#
备注:导入容器并不是直接还原容器,而是创建一个镜像,使用该镜像再创建容器并运行即可。
备注:和使用远程拉取回来的镜像创建容器不同,这里创建容器是需要附加原容器的COMMAND。


 
常用命令汇总
[root@localhost ~]# docker ps # 查看正在运行的容器
[root@localhost ~]# docker ps -a # 查看所有容器(不管运行与否)
[root@localhost ~]# docker ps -a --no-trunc # 查看所有容器(不管运行与否),且显示容器长ID和完整COMMAND
[root@localhost ~]# docker stats # 查看(所有)容器状态
[root@localhost ~]# docker start 容器名称/容器长ID/容器短ID # 启动容器
[root@localhost ~]# docker stop 容器名称/容器长ID/容器短ID # 停止容器
[root@localhost ~]# docker restart 容器名称/容器长ID/容器短ID # 重启容器
[root@localhost ~]# docker rm 容器名称/容器长ID/容器短ID # 删除容器
备注:操作容器时使用容器名称或容器长ID(64位)或容器短ID(12位或4位)任意一个均可。

Copyright © 2024 码农人生. All Rights Reserved