一、操作系统初始化配置
1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2、关闭selinux
sed -i ‘s/enforcing/disabled/’ /etc/selinux/config # 永久
setenforce 0 # 临时
3、安装Docker
下载地址:https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz
解压二进制包
tar zxvf docker-19.03.9.tgz
mv docker/* /usr/bin
4、systemd管理docker
cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
5、创建配置文件
mkdir /etc/docker
cat > /etc/docker/daemon.json << EOF
{
“registry-mirrors”: [“https://b9pmyelo.mirror.aliyuncs.com”]
}
EOF
6、启动并设置开机启动
systemctl daemon-reload
systemctl start docker
systemctl enable docker
7、修改docker产生的日志大小处理:
修改docker daemon.json文件,配置日志文件参数
默认 /etc/docker/daemon.json
{
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “50m”,
“max-file”: “5”
}
}
修改后,docker需要重新加载配置文件和重启。
CentOS7的操作
systemctl daemon-reload
systemctl restart docker
1
2
注意:新创建的容器会生效,原有容器不生效。
9、查出Docker容器日志并删除脚本
默认查找目录 /var/lib/docker/containers/
#!/bin/sh
echo “======== start clean docker containers logs "
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo “clean logs : $log”
cat /dev/null > $log
done
echo " end clean docker containers logs ========”
docker容器正在运行的话,使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。
原因是通过rm -rf删除,将会从文件系统的目录结构上解除链接(unlink)。
如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也是一直被占用。
正确操作覆盖操作 *cat /dev/null > -json.log。
或者可以通过rm -rf删除后重启docker容器。
docker启动web服务后出现的问题:
问题状况:
1、环境:centos7系统;
2、系统自带firewalld与docker的iptables有冲突;
3、对外端口本地可以访问,其它电脑无法访问并且访问不了外网,已经开启防火墙端口
解决方法:
一、更改系统防火墙为iptables
卸载原本系统自带firewalld防火墙:
1、停止并屏蔽firewalld服务
停止 systemctl stop firewalld
禁止开机自启动:
systemctl disable firewalld
屏蔽 systemctl mask firewalld
2、安装iptables-service软件包
yum install iptables-services
3、在引导时启用iptables服务
systemctl enable iptables
4、启动iptables服务
systemctl start iptables
5、保存防火墙规则
service iptables save
二、配置docker
第一步
vi /etc/docker/daemon.json
去掉
“iptables”:false
systemctl daemon-reload
systemctl restart docker
第二步:
service iptables save
service iptables restart
第三步:
vi /etc/docker/daemon.json
添加
“iptables”:false
systemctl daemon-reload
systemctl restart docker
第四步:
service iptables save
service iptables restart
使用命令:
列出所有容器
docker ps -a
删除容器
docker stop mynginx
docker rm mynginx
##########################################
运行Nginx部署网站
接下来思考问题:
Nginx配置、查看日志、部署网站
需要把外部的目录或文件映射到docker容器
创建目录
Ngdir=/www/docker/nginx
mkdir -p $Ngdir/{www,log,conf/conf.d}
创建配置(采用默认配置去注释)
`echo '#man config
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
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 -
r
e
m
o
t
e
u
s
e
r
[
remote_user [
remoteuser[time_local] “KaTeX parse error: Double superscript at position 34: … '̲status
b
o
d
y
b
y
t
e
s
s
e
n
t
"
body_bytes_sent "
bodybytessent"http_referer” ’
‘“
h
t
t
p
u
s
e
r
a
g
e
n
t
"
"
http_user_agent" "
httpuseragent""http_x_forwarded_for”’;
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
'>$Ngdir/conf/nginx.conf
echo '#nginx
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 404 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
'>$Ngdir/conf/conf.d/default.conf`
html
echo ‘Welcome to nginx!’>
N
g
d
i
r
/
w
w
w
/
i
n
d
e
x
.
h
t
m
l
e
c
h
o
′
e
r
r
o
r
p
a
g
e
50050250350440
4
′
>
Ngdir/www/index.html echo 'error_page 500 502 503 504 404'>
Ngdir/www/index.htmlecho′errorpage500502503504404′>Ngdir/www/50x.html
使用nginx镜像,创建容器mynginx
docker run -p 80:80 --name mynginx \ -v $Ngdir/conf/nginx.conf:/etc/nginx/nginx.conf:ro \ -v $Ngdir/conf/conf.d:/etc/nginx/conf.d:ro \ -v $Ngdir/www:/usr/share/nginx/html:rw \ -v $Ngdir/log:/var/log/nginx:rw \ -d nginx
测试html内容
curl 127.0.0.1
curl 127.0.0.1/123
查看error.log
cat $Ngdir/log/error.log
测试成功 _
参数说明:
-p 80:80:本地80端口:映射docker容器80端口
-v $Ngdir/log:/var/log/nginx 主机log目录挂载到容器log/nginx
##########################################
##########################################
常用命令
获取容器PID
docker inspect --format “{{.State.Pid}}” myngix
docker查看容器IP
docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ $(docker ps -a -q)
查看变量
docker exec -it mynginx env
列出容器:docker ps -a
查看最近生成的容器:docker ps -l
查看正在运行的容器:docker ps
显示容器的标准输出:docker logs CONTAINERID
使用docker run的-i -t参数就会响应这种交互
停止正在运行的容器:docker stop CONTAINERID
查看容器或镜像的详细信息:docker inspect CONTAINERID|IMAGE
删除容器:docker rm CONTAINERID
查看所有容器ID:docker ps -a -q
删除所有的容器:docker rm $(docker ps -a -q)
删除镜像:docker rmi IMAGE
##########################################
官方安装
官网选择版本 https://github.com/docker/compose/releases 以下命令手动修改版本号,例如1.24.1
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-uname -s
-uname -m
-o /usr/local/bin/docker-compose
复制
添加执行权限
chmod +x /usr/local/bin/docker-compose
复制
检查docker compose版本
docker-compose version