初学Docker,所以特意记录下使用过程,文中有错误之处望指出。
一、本文目的
在有网络的情况下centos上安装nginx比较方便,但有时生产环境不允许连接外部网络或者进行网络限制。所以只能在开发环境中先将nginx的容器打包成镜像文件然后移植到生产环境。
二、开发环境安装Nginx
1、查找 Docker Hub 上的 nginx 镜像
[root@localhost ~]# docker search nginx
2、拉取官方的Nginx镜像
[root@localhost ~]# docker pull nginx
3、在本地镜像列表里查到 REPOSITORY 为 nginx 的镜像
[root@localhost ~]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest f949e7d76d63 5 weeks ago 126 MB
4、以下命令使用 NGINX 默认的配置来启动一个 Nginx 容器实例,有一串数字出来即表示容器启动成功
[root@localhost ~]# docker run --rm --name nginx-test -p 8080:80 -d nginx
3583******edbb3e4b
其中,该命令的四个命令行参数的含义如下。
--rm:容器终止运行后,自动删除容器文件。
--name nginx-test:容器的名字叫做nginx-test,名字自己定义.
-p: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口
-d:容器启动后,在后台运行5、使用docker ps -a 可以查询启动的容器
还有更多参数可以查询官网。
[root~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
25c9c0501d4a nginx "/docker-entrypoint.…" 2 days ago Up 2 days 0.0.0.0:80->80/tcp my-nginx
至此nginx安装完成,在浏览器通过ip:8080即可出现nginx的欢迎界面。
三、部署vue项目
1、创建相应文件夹及文件
在/home目录下新建一个nginx文件夹,这个文件夹名称可随意创建。在/home/nginx文件夹下创建四个文件夹用来存放配置文件和vue项目编译好的文件。
mkdir -p conf conf.d logs www
conf:存放nginx.conf文件
conf.d 存放default.conf文件,这个文件为什么要用? 因为在nginx默认的nginx.conf文件中有一行是引入配置的:
include /etc/nginx/conf.d/*.conf;
logs:日志目录
www:vue项目的目录
[root@iZwz9hqzehulzxw6rw3ktsZ nginx]# ls -R
.:
conf conf.d logs www
./conf:
nginx.conf
./conf.d:
default.conf
./logs:
access.log error.log
./www:
index.html static
2、创建容器
docker run --rm -d -p 80:80 --net=host --name my-nginx \
-v /home/nginx/www:/usr/share/nginx/html/ \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/nginx/logs:/var/log/nginx \
nginx
具体说明:
(1)第一个“-v”,是项目位置,把项目放到挂载到的目录下即可;
(2)第二个“-v”,是挂载的主配置文件"nginx.conf",注意"nginx.conf"文件内有一行"include /etc/nginx/conf.d/*.conf;",这个include指向了子配置文件的路径,此处注意include后所跟的路径一定不要出错。
(3)第三个“-v”,把docker内子配置文件的路径也挂载了出来,注意要与(2)中include指向路径一致,重点强调一下,nginx.conf是挂载了一个文件(docker是不推荐这样用的),conf.d挂载的是一个目录
(4)第四个“-v”,是日志位置;
执行完毕后再检查下容器是否正常启动。我第一步安装nginx步骤过程的容器已经删除了。所以我现在只有一个nginx容器
四、打包成镜像并移植到其他服务器
我这里是先把nginx镜像先打包,然后把配置文件打包,然后放在另外的服务器再重新创建容器的。也可以直接把容器打包成镜像直接部署,我这里就不写了。
1、打包nginx镜像,将镜像保存为本地文件,其中08393e824c32为image id
[root]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 08393e824c32 10 days ago 132MB
[root]# docker save 08393e824c32> ./my-nginx-image.tar
2、将打包好后的tar文件拷贝到生产服务器。
3、在生产环境的服务器上使用load方法加载刚才上传的tar文件
docker load < /home/my-nginx-image.tar
在新的机器上再此使用docker images命令查看本机的镜像,检查刚才load的镜像有没有加载进来,发现加载进来的镜像名称、标签均为none,使用docker tag 08393e824c32 nginx:latest 修改为原来的镜像名称和标签名称,其中08393e824c32为images id
4、然后可以将开发环境已经设置好的配置文件和vue项目文件都打包拷贝到生产服务器重新启动一个容器即可。
五、容器启动相关命令
coker images #列出所有镜像
docker ps -aq #列出所有容器 ID
docker start 容器ID #启动
docker stop 容器ID #暂停
docker restart 容器ID #重启
docker rm 容器ID #移除
docker stop $(docker ps -aq) #停止所有容器
docker rm $(docker ps -aq) #删除所有容器
docker rmi $(docker images -q) #删除所有的镜像