如何在centos7中安装docker建议看官网的教程,不然docker在安装nginx时很可能会出错。要安装docker,可以直接参考我简书里的安装流程。用docker安装Nginx的过程又学到了很多,例
如何在centos7中安装docker建议看官网的教程,不然docker在安装nginx时很可能会出错。
要安装docker,可以直接参考我简书里的安装流程。
用docker安装Nginx的过程又学到了很多,例如复制docker容器内的文件到宿主机上等等使用nginx的很重要的一点是修改nginx.conf这个配置文件首先从dockerhub上拉取nginx最新的镜像docker pull nginx先简单的启动一个nginx容器,为了从容器中复制nginx.conf文件# docker启动nginx容器,命名为test
docker run –name test -d nginx查看nginx容器iddocker ps -a
注意:docker启动nginx需要两个配置文件
此处参考?迷彩诱惑的青春一个是位于容器内部的/etc/nginx/nginx.conf另一个是位于容器内部的/etc/nginx/conf.d/default.confdefault.conf配置的是server { }的内容
所以在这里我们需要把这两个配置文件复制到宿主机用于挂载
创建目录用于存放nginx.conf 和 default.conf# -p创建多级目录
mkdir /usr/docker/nginx -pmkdir /usr/docker/nginx/conf.d/ -p从nginx容器中复制出nginx文件到刚才新建的目录# docker复制容器id为e9bf057b53bb的/etc/nginx/nginx.conf路径的nginx.conf文件到容器外宿主机的/docker/nginx/目录
docker cp e9bf057b53bb:/etc/nginx/nginx.conf /usr/docker/nginx/# 复制default.conf,含义参考上条注释docker cp e9bf057b53bb:/etc/nginx/conf.d/default.conf /usr/docker/nginx/conf.d/复制出来之后删除刚才临时启动的test的容器#停止名为test的容器
docker stop test#删除名为test的容器docker rm test重新启动一个完整的nginx容器docker run -d -p 80:80
–name nginx –net host -v /usr/docker/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /usr/docker/nginx/html:/usr/share/nginx/html -v /usr/docker/vsftpd/root:/mnt/data -v /usr/docker/nginx/logs:/var/log/nginx –privileged=true –restart=always nginx
下面的配置说明很重要* * *结合我的default.conf的配置来看解释:
-p主机的端口80映射到容器的端口80。
–nginx容器的名称是nginx
–Net主机容器和主机公共网络
-v映射主机和容器之间的路径。首先,将容器目录中的两个配置文件nginx.conf和default.conf映射到主机的/usr/docker/nginx下的对应目录。之后,更改主机的配置相当于更改容器中的配置文件。
其次,看下图中的配置。找到容器中相应位置的所有文件。没错,就是找到容器的对应位置,不过我也把这些位置映射出来了。比如nginx的首页位置映射到/usr/docker/nginx/html。最重要的是把静态资源的位置映射到主机的vsftpd静态资源服务器/usr/docker/vsftpd/root的目录下。结合default.conf中的配置,可以通过nginx访问vsftpd下的静态图像文件。
-v还映射了日志文件的目录。
–Privileged=true授予容器中的root权限
–Restart =总是从docker开始
启动nginx:最新镜像
开启防火墙相关端口#开启宿主机防火墙80端口firewall-cmd --zone=public --add-port=80/tcp --permanent#重启防火墙firewall-cmd --reload#查看防火墙已经启动的端口firewall-cmd --zone=public --list-ports这时候打开浏览器访问宿主机ip我这里是192.168.137.100就应该访问调到nginx欢迎页,这里会报错403因为/usr/docker/nginx/html路径下并没有index.html这个欢迎页额,但是准确的说nginx已经作为docker容器启动了# 简单的自己写一个欢迎页吧,最起码访问宿主机ip我这是192.168.137.100要看到效果啊 cd /usr/docker/nginx/html # 添加一个index.html文件写入hello nginx echo “hello nginx” > index.html # 容器中的nginx热更新 docker exec -it nginx nginx -s reload # 不管用就直接重启ngixn容器 docker restart nginx # 强迫症非要nginx首页如我的话,我直接拷贝windows中nginx的index页到/usr/docker/nginx/html中了
到这nginx容器启动好了,下面启动vsftpd容器打开防火墙相关端口#打开主机防火墙firewall的80端口firewall-cmd-zone = public-add-port = 80/TCP-permanent #重启防火墙firewall-cmd - reload# #检查已经启动防火墙的端口firewall-cmd-zone = public-list-ports。此时,打开浏览器访问主机ip。我在192.168.137.100,所以我应该访问nginx欢迎页面。这里会报错403是因为/usr/docker/nginx/html路径中没有index.html的欢迎页面,但准确的说,nginx已经作为docker容器启动了#干脆自己写个欢迎页面,最起码要访问主机ip。这是192.168.137.100。看效果。cd /usr/docker/nginx/html #添加一个index.html文件并写入hello nginx echo & # 8220你好nginx & # 8221& gtIndex.html #容器Docker Exec-it nginx nginx-s重载中nginx的热更新#如果不行就重启ngixn容器Docker重启nginx #强迫症需要nginx首页,我说过了,我把windows中nginx的索引页直接复制到/usr/docker/nginx/html中,既然nginx容器已经启动,那么就启动vsftpd容器#拉取vsftpd镜像docker pull fauria/vsftpd#启动容器docker run -d -v /usr/docker/vsftpd:/home/vsftpd -p 20:20 -p 21:21 -p 21100-21110:21100-21110 -e FTP_USER=root -e FTP_PASS=123456 -e PASV_ADDRESS=192.168.137.100 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --privileged=true --restart=always fauria/vsftpd#开启20防火墙端口firewall-cmd --zone=public --add-port=20/tcp --permanent#开启21防火墙端口firewall-cmd --zone=public --add-port=21/tcp --permanent#开启21100-21110防火墙端口firewall-cmd --zone=public --add-port=21100-21110/tcp --permanent#重启防火墙firewall-cmd --reload#查看防火墙已经启动的端口firewall-cmd --zone=public --list-ports
Docker启动命令解释:
-v挂载目录,相当于本地挂载容器中的目录。
-p端口映射本地20容器20 …。等等。
-e分别设置用户名、密码、主机地址、最小和最大端口。
–名称容器是vsftpd。
–Privileged=true授予容器root权限。
–重启=当docker打开时总是自动启动
由fauria/vsftpd运行的名称的镜像。
打开浏览器访问ftp://192.168.137.100至此文件服务器搭建成功将新的FTP用户添加到现有容器中# 进入容器内部 docker exec -it vsftpd bash # 新建myuser用户的文件夹 mkdir /home/vsftpd/myuser # 添加新用户myuser换行密码5678写入文件中 echo -e “myusern5678” >> /etc/vsftpd/virtual_users.txt # 密码写入数据库 /usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db # 退出容器内部 exit # 重启vsftpd docker restart vsftpd通过nginx访问到静态资源服务器中的图片了http://192.168.16.128/images/test.png
用nginx是方便我们使用http协议访问静态资源服务器其实只需要安装vsftpd就能ftp协议上传图片了,浏览器访问ftp://192.168.16.128,填写我们之前设置的用户名root 密码5678