- 一、 docker-ce部署
Docker目前官方主要有两个版本,一个是企业版(docker-ee),一个是社区版(docker-ce),我们这里主要使用的是社区版。
-
二、 本机部署nginx
-
1、 拉取镜像:
docker pull nginx
说明:
docker pull nginx 默认下载latest;
docker pull nginx:latest 下载latest版本的nginx
docker images 查看拉取的镜像
docker search nginx 从Docker Hub查找镜像
- 2、启动镜像
sudo docker run --name nginx-test -p 8081:80 -d nginx
说明:
–name 容器名称
-p 端口映射容器80端口到本机8081端口
-d 后台运行容器,并返回容器ID
nginx 镜像名称
- 3、在docker中部署nginx
a、创建本机配置文件目录
mkdir -r /home/docker/nginx
mkdir conf conf.d data logs
说明:
data:静态资源,一般前端页面
logs:nginx日志
conf.d:nginx配置,代理、转发、负载、集群
conf:nginx配置,一般配置缓存、限流在这个里面
b、将容器中的配置文件复制本机
docker cp nginx-test:/etc/nginx/nginx.conf /home/docker/nginx /conf
docker cp nginx:/etc/nginx/conf.d /home/docker/nginx/conf.d
c、修改配置后重新部署新容器
docker run --name nginx -d --restart=always --privileged=true --net=host -v /docker/nginx/html:/usr/share/nginx/html -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /docker/nginx/logs:/var/log/nginx -v /docker/nginx/conf.d:/etc/nginx/conf.d -d nginx
说明:
–restart=always 当 Docker 重启时,容器自动启动
–privileged=true 容器内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限;privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
–net=host:容器就和宿主机共用网络,加了–net=host以后就不需要再做端口映射了。比如docker容器内在8080端口起了一个web server,不加的话需要把本机的某个port比如7979和docker内的8080做一个映射关系,访问的时候访问7979,加了net=host则直接访问8080。
-v 将本地目录(文件)挂载到容器指定目录
- 三、 迁移到正式环境(无网)
- 1、导入/导出的命令主要有下面几个:export、import、save、load,可以分为2组:
a.save和load(镜像的导出和导入, 导出是复制的过程)
b.export和import(容器的导出和导入,导出是将当前容器 变成一个新的镜像)
- 2、save和load(镜像的导出和导入)
#输出
docker save -o nginx.tar nginx:latest 或docker save > nginx.tar nginx:latest
#输入
docker load -i nginx.tar或docker load < nginx.tar
说明:
导出时使用-o或者输出重定向>将本地镜像仓库中的镜像输出保存到文件中。
导入时使用-i或者输入重定向<将镜像文件导入到本地镜像仓库。
- 3、export和import(容器的导出和导入)
#导出
docker export -o nginx-test.tar nginx-test
#导入
docker import nginx-test.tar nginx:imp或cat nginx-test.tar | docker import - nginx:imp
说明:
其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
- 4、镜像和容器 导出和导入的区别:
a.export 命令导出的 tar 文件略小于 save 命令导出的
b.export 命令是从容器(container)中导出 tar 文件,而 save 命令则是从镜像(images)中导出
c.export 导出的文件再 import 回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。
- 5、使用场景推荐
a.若是只想备份images,使用save、load即可
b.若是在启动容器后,容器内容有变化,需要备份,则使用export、import