安装docker(Centos)
前期准备
我们docker 安装前应该配置一下电脑,为了方便演示docker的使用,以下操作均在centos7
进行,并且使用 root
账号进行,我们先关闭防火墙。
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止防火墙开机启动
关闭selinux
(阿里云跳过)
/usr/sbin/sestatus -v #查看selinux 状态
# SELinux status: enabled 为开启
永久关闭 selinux ,编辑一下文件将 SELINUX=enforcing 改为 SELINUX=disabled 。
vi /etc/sysconfig/selinux
阿里云、腾讯云中默认关闭 selinux,不需要此操作;
微软云、自己安装的centos镜像默认开启;
不关闭可能会无法将容器中的卷挂载到磁盘或其他异常情况。记得
reboot
重启电脑
还有可能系统源不够新,可能出现问题,我们更新一下yum。
yum update -y #更新源
安装(centos7.x)
下面开始正式安装
#yum的方式安装docker
yum install docker -y
#启动docker服务
service docker start
#设置docker服务为开启启动
chkconfig docker on
我此时演示安装的版本为 1.13.1,大家可以通过命令 docker version 查看。
基本配置
阿里加速
我们可以访问 阿里云容器服务 ,如果没有账号,那么可以注册一个。
使用 vi 编辑一下文件
vi /etc/docker/daemon.json
将其中{}
中增加参数变为一下内容,为json格式,如果原来就有一些配置,那么在原来基础上添加即可。
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
或者新安装的 docker 可以直接
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
重载配置和重启docker
systemctl daemon-reload
systemctl restart docker
开启远程(用不到的跳过)
有时我们需要通过远程访问docker的方式,那么我们就要开启docker的远程访问。
- 编辑配置文件
vim /lib/systemd/system/docker.service
- 修改以下位置为
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
- 保存退出,然后加载配置
systemctl daemon-reload
- 重启服务
service docker restart
- 检查是否可以连接
curl http://localhost:2375/verion
也可以不在一个主机,用浏览器通过ip访问,如果主机可以访问,同网段下其他主机不能访问,请检查端口是否开放,阿里云等服务器需要配置放行。
安装与运行
常用命令
如果大家不想直接看命令可以到常用安装查看示例。这里主要简单的讲一下常见的命令,后面将会详细讲述常用功能对应的命令详细使用。
镜像操作
下面简单的介绍一下docker中镜像的查找、拉取、上传、删除、导入导出等
命令 | 解释 | 示例 |
search | 从仓库查找镜像 | docker search centos |
pull | 从仓库获取镜像到本地 | docker pull centos |
login | 登陆到仓库 | docker login |
push | 上传镜像到仓库 | docker push centos |
images | 查看本地镜像 | docker images |
rmi | 删除本地镜像 | docker rmi centos |
tag | 标记本地镜像 | docker tag docker.io/centos lu/centos:v1 |
容器操作
run
docker run centos
运行参数解释
常用参数 | 作用解释 |
-e | 环境变量,容器启动所需要的环境变量值格式 key=value |
-p | 端口映射,格式 8080:80 ,8080为主机端口号,80为容器端口号 |
-v | 挂载磁盘,/data:/var ,前面的是主机磁盘路径,后面为容器内路径 |
–name | 给容器起名字 |
-d | 后台运行 |
–restart | 配置重启策略: no,默认策略,在容器退出时不重启容器 on-failure,在容器非正常退出时(退出状态非0),才会重启容器 on-failure:3,在容器非正常退出时重启容器,最多重启3次 always,在容器退出时总是重启容器 unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动 |
常用安装
mysql
以mysql5.7为例,:
号跟着版本,可以不进行pull,直接进行run,会自己进行下载镜像。
docker pull mysql:5.7
运行 mysql5.7
docker run --name mysql57 \
-e MYSQL_ROOT_PASSWORD=root \
--privileged=true \
-p 3306:3306 \
-d mysql:5.7 \
--lower_case_table_names=1
运行 mysql5.6
docker run --name mysql56p3306 \
-e MYSQL_ROOT_PASSWORD=root \
--privileged=true \
-p 3306:3306 \
-v /docker/mysql56p3306/data:/var/lib/mysql \
-v /docker/mysql56p3306/conf.d:/etc/mysql/conf.d \
-d mysql:5.6 \
--lower_case_table_names=1
运行 mysql8
docker run --name mysql8 \
-e MYSQL_ROOT_PASSWORD=root \
--privileged=true \
-p 3306:3306 \
-v /docker/mysql8p3306/data:/var/lib/mysql \
-v /docker/mysql8p3306/conf.d:/etc/mysql/conf.d \
-d mysql \
--lower_case_table_names=1
以上参数参考来源docker官网 mysql 部分,下面是部分参数解释
- –name 指定此容器的名字为mysql57,之后使用名字进行重启、停止、删除等
- MYSQL_ROOT_PASSWORD 用于设置root账户默认密码
- 3306:3306 将主机的3306端口映射到容器的3306端口,当然主机端口可以修改,mysql容器端口必须为3306,这是由容器镜像决定的
- -v 为磁盘的映射,我们可以通过此映射进行主机和容器的数据交互
- -d 后台运行
- –privileged=true 赋予权限,解决目录权限不足问题。
- –lower_case_table_names=1 忽略大小写。
mysql 想要远程连接还需要设置开启远程访问
mysql -uroot -proot
use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
nginx
docker run --name nginx80 \
-p 80:80 \
--privileged=true \
-v /docker/nginx80/conf.d:/etc/nginx/conf.d \
-v /docker/nginx80/html:/usr/share/nginx/html \
-v /docker/nginx80/logs:/var/log/nginx \
-d nginx
使用 https 443 ssl
docker run --name nginx80 \
-p 80:80 \
-p 443:443 \
--privileged=true \
-v /docker/nginx80/conf.d:/etc/nginx/conf.d \
-v /docker/nginx80/html:/usr/share/nginx/html \
-v /docker/nginx80/logs:/var/log/nginx \
-v /docker/nginx80/ssl:/ssl \
-d nginx
挂载目录解释
/docker/nginx80/conf.d:/etc/nginx/conf.d 用于放置配置文件,方便在宿主机修改配置文件。
/docker/nginx80/html:/usr/share/nginx/html 用于放置html静态网页,方便在宿主机替换网页。
/docker/nginx80/logs:/var/log/nginx 日志方便在宿主机查看。
/docker/nginx80/ssl:/ssl 挂载ssl 证书路径。
创建配置到 /docker/nginx80/conf.d ,当然此配置可以根据需要自行配置,下面以默认配置为例。
vim default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
配置ssh https
新建ssh 配置文件 https_params
,注意修改自己的证书路径。
listen 443 ssl;
ssl_certificate /ssl/****.com.pem; #根据实际修改,路径为容器内路径
ssl_certificate_key /ssl/****.com.key; #根据实际修改,路径为容器内路径
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
if ( $scheme != https )
{
rewrite ^/(.*) https://$host/$1 permanent;
}
在 server {}
中添加一行
include /etc/nginx/conf.d/https_params;
注意:路径问题,以上两处配置的路径应该是容器内的路径。
配置如vue之类单页应用在 server
,location
中 添加配置:
try_files $uri $uri/ /index.html;
mongo
docker run --name mongo27017 \
-p 27017:27017 \
-v /docker/mongo34p27017:/data/db \
-d mongo:3.4
创建用户修改密码
#进入容器
docker exec -it mongo27017 mongo admin
#创建用户和密码
db.createUser({ user: 'admin', pwd: '123456', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
#验证一下对不对
db.auth("admin","123456");
#退出
exit
修改密码
use admin;
switched to db admin
> db.changeUserPassword('admin','88889999');
redis
docker run --name redis6379 \
--privileged=true \
-p 6379:6379 \
-v /docker/redis6379/data:/data \
--restart=always \
-d redis
gitlab中文
docker run \
--detach \
--publish 8443:443 \
--publish 10080:80 \
--name gitlab \
--restart unless-stopped \
--volume /docker/gitlab/etc:/etc/gitlab \
--volume /docker/gitlab/log:/var/log/gitlab \
--volume /docker/gitlab/data:/var/opt/gitlab \
beginor/gitlab-ce:11.3.0-ce.0
启动完成访问 http:ip:10080
第一次访问需要修改密码
gitea
docker run --name=gitea \
-p 10022:22 -p 10080:3000 \
-v /data/gitea:/data \
-d gitea/gitea:latest
rabbitmq
docker run -d --hostname rabbithost \
--name rabbitmq \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=guest \
-p 15672:15672 \
-p 5672:5672 \
rabbitmq:3-management
RABBITMQ_DEFAULT_USER
设置默认用户名
RABBITMQ_DEFAULT_PASS
设置默认密码映射端口 15672 为web访问端口,5672为服务端口。