安装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的远程访问。

  1. 编辑配置文件
vim /lib/systemd/system/docker.service
  1. 修改以下位置为
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
  1. 保存退出,然后加载配置
systemctl daemon-reload
  1. 重启服务
service docker restart
  1. 检查是否可以连接
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之类单页应用在 serverlocation中 添加配置:

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为服务端口。