docker使用centos镜像,编译安装nginx
1. 拉取镜像
[root@localhost ~]# docker pull centos
2. 运行centos容器
[root@localhost ~]# docker run --name centos01 -it centos
3. 安装依赖包
[root@a4f6f126ac72 /]# yum -y install make gcc gcc-c++ openssl-devel pcre zlib openssl gd-devel wget pcre-devel
4. 下载nginx的tar包
[root@a4f6f126ac72 /]# wget http://nginx.org/download/nginx-1.20.1.tar.gz
也可以使用下面的方法
// 将本地的包传到容器
[root@localhost ~]# docker cp /root/nginx-1.20.1.tar.gz a4f6f126ac72:/root //包的位置加容器的id+容器目录
5. 解压nginx的tar包
[root@a4f6f126ac72 ~]# tar xf nginx-1.20.1.tar.gz -C /usr/local/
6. 创建nginx用户
[root@a4f6f126ac72 local]# useradd -r -M -s /sbin/nologin nginx
7. 创建日志目录,并设置为nginx用户
[root@a4f6f126ac72 local]# mkdir -p /var/log/nginx
[root@a4f6f126ac72 local]# chown -R nginx.nginx /var/log/nginx/
8. 编译安装nginx
[root@a4f6f126ac72 nginx-1.20.1]# pwd
/usr/local/nginx-1.20.1
[root@a4f6f126ac72 local]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log
[root@a4f6f126ac72 local]# make && make install
9. 设置环境变量
[root@a4f6f126ac72 local]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh
[root@a4f6f126ac72 local]# source /etc/profile.d/nginx.sh
10. 启动nginx报错如下内容
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
解决措施
[root@a4f6f126ac72 conf]# pwd
/usr/local/nginx/conf
[root@a4f6f126ac72 conf]# vim nginx.conf
9 pid /usr/local/nginx/logs/nginx.pid;
[root@a4f6f126ac72 conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf //指定文件加载nginx配置文件
11. 将当前容器生成nginx镜像并上传
// 首先登录你的docker Hub
[root@localhost ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: dockerimages123 //dockerHub的账号
Password: //密码
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
// 将容器打包成镜像
// a4f6f126ac72这个是容器的id,也可以写容器的名字,dockerimages123/nginx:v0.1这个是镜像的名字,名字只能写自己dockerHub的id加镜像名才可以上传
[root@localhost ~]# docker commit -c 'CMD ["/bin/bash","/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf"]' a4f6f126ac72 dockerimages123/nginx:v0.1
sha256:5395d21f1c7547d1b2cda98d7c2b7b346ca5c3b98b2e510ab6aa469d08977d0a
// 将镜像上传到dockerHub仓库
[root@localhost ~]# docker push dockerimages123/nginx:v0.1 //这个写你dockerHub的名字然后接镜像名
The push refers to repository [docker.io/dockerimages123/nginx]
ba052d369600: Pushed
74ddd0ec08fa: Pushed
v0.1: digest: sha256:17ae9261f7b59d1bbb1a61607b32b95ae59e631d5c046c7ae7d8198e22a0eb0c size: 742
// 退出账号的命令
[root@localhost ~]# docker logout