空闲时间大概过了一遍Docker,于是就整理一下 🐾

Docker官方镜像站

https://hub.docker.com/

Linux中安装Docker

下载并解压Docker安装包

// 下载并解压Docker安装包
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
tar -zxvf docker-20.10.9.tgz

// 将Docker下的文件移入/user/bin目录下
cp docker/* /usr/bin/

新增docker.service

在/etc/systemd/system/目录下新增docker.service文件

cat /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
  
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
  
[Install]
WantedBy=multi-user.target
// 给执行权限
chmod +x /etc/systemd/system/docker.service 

// 重新加载配置文件
systemctl daemon-reload

// 设置开机启动
systemctl enable docker.service

// 启动Docker
systemctl start docker

一些基础命令

// 拉取镜像
docker pull centos

// 拉取指定版本,可参考Docker Hub
docker pull centos:centos7.9.2009

// 镜像列表
docker images

// 使用镜像创建容器, centos_test:容器名, centos:镜像
docker run -itd --name centos_test centos /bin/bash

// 使用镜像创建容器,并添加端口映射,此时主机的 8080 端口将被映射到容器的8080端口
docker run -itd --name nginx_test -p 8080:80 nginx

// 进入容器, 36b8d47cbdd1:容器id
docker exec -it 36b8d47cbdd1 /bin/bash

// 启动容器
docker start 36b8d47cbdd1

// 关闭运行中容器
docker stop 36b8d47cbdd1

// 重启容器
docker restart 36b8d47cbdd1

// 删除容器
docker rm 36b8d47cbdd1

// 查看所有容器
docker ps -a

// 查看运行中容器
docker ps

// 变更镜像tag
docker tag centos:latest centos:0.1

// 删除镜像
docker rmi c919045c4c2b

Docker搭建Nginx容器实操

1️⃣ 拉取Nginx镜像

docker pull nginx

当然,也可以使用Centos/Ubuntu镜像,安装后再手动安装Nginx

2️⃣ 使用镜像创建容器并添加端口映射以及文件映射

docker run --name nginx_test -p 80:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/html/:/usr/share/nginx/html --privileged=true -d nginx

(将配置文件以及网站文件提出来更方便管理

此时在防火墙及云服务器安全组均放通 80 端口的情况下,并将项目文件丢到 /data/nginx/html/ 下,使用ip即可直接访问

配置文件可参考此处


user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    
    server
    {
        listen 80;
        server_name your_ip_address;
        index index.php index.html index.htm default.php default.htm default.html;
        root /usr/share/nginx/html;
        
        #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
        #error_page 404 /404.html;
        #error_page 502 /502.html;
        #ERROR-PAGE-END
        
        #禁止访问的文件或目录
        location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
        {
            return 404;
        }
        
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
        
        #一键申请SSL证书验证目录相关设置
        location ~ \.well-known{
            allow all;
        }
    }


    include /etc/nginx/conf.d/*.conf;
}

3️⃣ OR

假如不进行文件映射操作

docker run --name nginx_test -p 80:80

那么此时在端口放通的情况下,使用ip则可以直接访问到nginx初始页

End

起初也是因为太懒的原因,用宝塔习惯了,所以没有考虑到使用Docker,因为敲命令和直接在管理后台中配置相比还是麻烦不少(单纯不想敲命令🥲

不过吧,经过下午的摸索,差不多也理解了Docker的使用场景,比如说配合阿里云的容器镜像服务使用,将搭建好的各种环境上传,然后再其他机器上则只需要docker pull ...

这样做也就可以省去一部分在环境搭建上所消耗的时间

也就好比win上重装系统时附带了一部分所必须的软件 🤔


Ex - ploooosion!