启动报错
OS:CentOS7
安装docker
yum install docker -y
启动
systemctl start docker 或者 service docker start
报错
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
检查报错原因
journalctl -amu docker
Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disable selinux in doc
看起来是selinux的原因,关闭selinux也不能解决,需要修改docker的配置
#将/etc/sysconfig/docker中的--selinux-enabled 改为 --selinux-enabled=false
echo OPTIONS=\'--selinux-enabled=false --log-driver=journald --signature-verification=false\' >> /etc/sysconfig/docker
修改完成后启动成功
部署与删除
部署MySQL
#下载到本地(也可以通过docker run的时候直接下载,所以下面的语句可以不用执行)
docker pull mysql:5.7
#不写版本号的话,会下载最新版的,现在会直接下载8.0
查看下载的镜像
docker images
启动MySQL
mkdir -p /data/mysql/data /data/mysql/logs /data/mysql/conf
cd /data/mysql
#在docker run的时候下载镜像
docker search mysql
docker run -p 3306:3306 --name zabbix_mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 -d mysql:5.7
# -d部分必须要对标红框出的内容,比如mysql-cluster一定要写成mysql/mysql-cluster,否则会报错找不到这个repository
# -v参数是作为映射使用,此处并没有使用外部数据和外部参数来启动
-v 外部路径:内部路径
#启动之后通过docker ps -a可以查看docker启动的所有进程
关闭进程
docker stop 容器名
从容器中删除(通过docker ps -a查看容器ID)
docker rm 容器ID
#删除全部容器
docker rm $(docker ps -a -q)
docker rmi 镜像ID
#删除所有镜像
docker rmi $(docker images -q)
#无法在系统中直接进入mysql,使用客户端连接
重命名
docker rename 原容器名 现容器名
docker rename zabbix_mysql mysql
查询日志
docker logs mysql
重启
docker restart mysql
使用外部参数和数据启动MySQL
docker run --name mysql-server -t \
-p 3306:3306 \
--privileged=true \
-v /data/mysql/mysql3306/data:/var/lib/mysql \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin
部署的时候,外部的mysql需要处于关闭状态,否则会报错
--privileged=true确保内部具有root权限,否则docker内的root对于外部的mysql来说只是一般权限
-v /data/mysql/mysql3306/:/etc/mysql/conf.d 这是2个配置文件的路径,因为我本身的配置文件里面有相当多的特殊设置,所以此处没有挂载配置,如果需要挂载配置,最好单独写一份能匹配的配置
搭建zabbix-server
--link用法
--link 容器名:alias
之前已经把mysql的名字由zabbix_mysql改为了mysql,因此--link写为 mysql:mysql而不是--link zabbix_mysql:mysql
[root@zabbix ~]# cat zabbix.sh
#!/bin/bash
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
--link mysql-server:mysql \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql:latest
docker run --name zabbix-web-nginx-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-p 80:80 \
-d zabbix/zabbix-web-nginx-mysql:latest
安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
验证
docker-compose --version
虚拟机下的x509报错
#这是一个证书报错,走公司的虚拟机不会出这个报错,走自己PC的虚拟机就会
报错大概就是下面的样子
docker: error response from daemon: get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority.
解决方法:
cd ~
openssl genrsa -out client.key 4096
openssl req -new -x509 -text -key client.key -out client.cert
#然后进入目录
cd /etc/docker/certs.d
#重新回去建路径
mkdir -p /etc/docker/certs.d/registry.docker.com
cp ~/client.* /etc/docker/certs.d/registry.docker.com/
service docker restart
247报错
启动报错大致如下:
...container_linux.go:247 ...write parent: broken pipe...
使用命令journalctl -u docker.service
检测可以发现kernel字样,推测原因为内核过旧
#查看当前内核版本如下
uname -r
3.10.0-327.el7.x86_64
执行升级并重启后内核版本
uname -r
3.10.0-957.10.1.el7.x86_64
经测试可以正常运行
容器内部无法使用vim/vi
apt-get update
apt-get install -y vim
原生仓库下载太慢的问题
#改成国内仓库源
vim /etc/docker/daemon.json
{"registry-mirrors": ["https://k0rfl0e1.mirror.aliyuncs.com"]}
#echo {\"registry-mirrors\": [\"https:\/\/k0rfl0e1.mirror.aliyuncs.com\"]} > /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker
Docker报错:WARNING: IPv4 forwarding is disabled. Networking will not work.
sysctl net.ipv4.ip_forward
如果结果为1则正常,否则
vi /usr/lib/sysctl.d/00-system.conf
添加下面这行
net.ipv4.ip_forward=1
然后重启network
Docker网络
docker network ls
删除不想要的桥接网络
docker network rm 7d00c730a668
删除该桥接网卡
ifconfig br-7d00c730a668 down
brctl delbr br-7d00c730a668
#确认该网卡已经删除
brctl show