在继续本文之前,首先要确认你已经安装了Docker,确保Docker已经就位。第一步就是执行
sudo docker info
命令检查相关环境。
通过上面一章节我们已经了解到容器相当于一个跑起来的镜像,是一个运行的执行环境,那下面通过使用docker运行nginx来看下容器相关的一些操作。
首先可以使用 docker run 命令来创建 Nginx 容器,执行如下命令。
docker run --name containerName -p 8080:80 -d nginx
来让我们先看下命令。
执行完可以看下效果:
问题来了,因为是后台运行,我们怎么知道容器已经正常起来了?
在真正生产环境上我们要判断容器是否健康,可以从浅至深的来检查几个方面。
可以通过 docker ps 命令,查看正在运行的容器,并检查是否有目标容器,关注状态
docker ps
另外我们从上面也可以看出是将宿主机的8080端口映射到容器的80端口了。
业务指标就有很多,比如说端口是否正常被占用、程序是否正常启动、日志是否打印正常等等,像这个demo而言,只需要看下nginx首页是否可以正常访问。
然后访问后,进一步查询容器日志,可以看到访问日志
docker logs nginx # 容器名称
走到这里,其实一个容器应用已经可以使用了,但问题是我们想进一步修改内容,或者说进去看业务日志,那怎么办?其实容器提供了一种伪tty的方式让我们在终端进入到容器内部,类似于ssh
docker exec -it nginx /bin/sh
上面的命令通过docker exec,搭配 -it 还有 /bin/sh 模拟一个终端,让我们直接于容器内部交互。执行完之后,我们就可以像平常linux系统进行修改了,举个例子,修改nginx 主页内容
- cd /usr/share/nginx/html
- vim index.html
我们其实发现业务代码放到容器里面,那如果有多个实例岂不是要都修改?这里呢,可以理解这种方式是无状态的实例,也就说容器不与其他有依赖,易于扩展。可以使用编排工具,将修改后的镜像分批分发替换老镜像完成版本的迭代。
当然还有另外一种方式,就是使用数据卷。
数据卷是一个虚拟目录,指向宿主机的某个目录,这样将容器和数据分离,同时也可以让多个容器共享同一份数据。
可以在创建容器的时候,通过 -v 参数让宿主机的一个目录挂载到容器的制定目录下。
docker run --name nginx -v /opt/html:/usr/share/nginx/html -p 8080:80 -d nginx
这里是将宿主机的/opt/html挂载到容器下的/usr/share/nginx/html下,这样不管修改哪一侧,都会同步。
容器常用命令 | |
操作命令 | 常用参数说明 |
docker run | 创建启动容器 |
-it:可交互的伪终端,进入容器内部 --name:为容器起名 --rm:运行完毕删除容器 -d:容器后台运行 -v:卷挂载 | |
docker ps | 列出正在运行的容器 |
docker exec | 进入容器内部执行 |
-it:交互终端执行 | |
docker rm | 删除容器 |
docker start | stop | 启动或停止容器 |
docker logs | 查询运行日志 |
docker inspect | 获取容器配置信息 |
--format '{{.NetworkSettings.IPAddress}}' 容器名称 |