1、安装 Docker
docker 官网
注意:重新安装需先清除旧版本(之前没有装过Docker,可以直接跳过)
清除旧版本输入命令:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
1.1 第一种 使用官方安装脚本自动安装
如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
1.2 第二种 手动安装
- Linux环境,先切换到 root 用户下,确认上面的安装的Centos系统内核要不低于3.10。可以通过
uname -r
来查询当前内核版本。
![image][unamer]
-
使用 Docker 仓库进行安装
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,可以从仓库安装和更新 Docker。2-1 安装所需要的软件(yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2)
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
![image][yamutils]
2-2 设置仓库
官方源地址(慢,不推荐)
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
国内源地址
阿里源:
sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
清华大学源:
sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
-
安装 Docker Engine-Community (社区版)
更新yum软件包索引,创建缓存:
yum makecache fast
安装最新版(Docker引擎(docker-ce)、Docker客户端(docker-ce-cli))
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
这一步算安装完成,也可以指定版本安装,下面
列出并排序存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
yum list docker-ce --showduplicates | sort -r
选择版本安装:
该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。
例如:docker-ce-18.09.1
yum install docker-ce-3:20.10.9-3.el7 .ce docker-ce-cli-3:20.10.9-3.el7 .ce containerd.io docker-compose-plugin
-
启动并测试
启动
systemctl start docker
关闭
systemctl stop docker
查看版本
docker version
测试运行HelloWorld,执行命令
docker run hello-world
由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行,输出“Hello from Docker!”后容器停止
-
镜像加速
配置步骤:登录,进入 工作台 -> 容器镜像服务(找不到就搜一下) -> 镜像工具 -> 镜像加速器。
将该地址配置到docker中:
cd /etc/docker
vi /etc/docker/daemon.json
在daemon.json中写入以下内容:(即加速器地址 xxxx就是上面的地址):
{
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
刷新配置,重启docker
注意这个 daemon.json改成daemon.conf 否则会出现下面情况 ,按照阿里云给的命令(上面镜像加速图)不会出现这个问题
改名rename daemon.json daemon.conf daemon.json
配置之后可以直接下载镜像,且镜像tag为官方tag,不需要加上云服务商的地址。
sudo systemctl daemon-reload
sudo systemctl restart docker
2、docker 常用命令
2.1 基本命令
systemctl enable docker # 设置开机自启
systemctl start docker # 启动
systemctl stop docker # 关闭
systemctl restart docker # 重启
systemctl status docker # 运行状态
docker version # 显示版本信息
docker info # 显示系统信息,包括镜像、容器数量
docker --help #帮助
2.2 镜像命令
# 查看自己服务器中docker 镜像列表
docker images
# 搜索镜像
docker search 镜像名
docker search --filter=STARS=9000 mysql #搜索 STARS >9000的 mysql 镜像
# 拉取镜像 不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本
docker pull 镜像名
docker pull 镜像名:tag
# 运行镜像 tag同上
docker run 镜像名
docker run 镜像名:Tag
# 删除镜像
# 删除一个
docker rmi -f 镜像名/镜像ID
# 删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
# 删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
# 强制删除镜像
docker image rm 镜像名称/镜像ID
2.3 容器命令
2.3.1 查看
# 查看正在运行容器列表
docker ps
# 查看所有容器 -----包含正在运行 和已停止的
docker ps -a
# 查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID
2.3.2 运行,停止, 重启
注意:容器间,环境是隔离的。可以理解为每一个docker容器都相当于在我们的服务器上占用资源然后开辟了属于自己的一个空间,(例如,两个mysql容器 ,mysql1和mysql2,两个都可以使用3306端口启动,因为 mysql1 容器中的3306 与 mysql2 容器的3306毫无关系),默认情况下,我们是无法通过宿主机(安装docker的服务器)端口来直接访问容器的 ,因为docker容器自己开辟空间的端口与宿主机端口没有联系,所以需要进行容器与宿主机之间的端口映射。
# 运行一个容器
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行)
# --name 给要运行的容器 起的名字 /bin/bash 交互路径
# -p 宿主机端口:容器端口 表示将容器内部端口与docker宿主机(linux)映射
# --restart=always 表示该容器随docker服务启动而自动启动
docker run -it -d --name 要取的别名 -p 宿主机端口:容器端口 --restart=always 镜像名:Tag /bin/bash
# 例:
docker run -itd --name myredis -p 8888:6379 --restart=always redis:5.0.5 /bin/bash
# 停止一个容器
docker stop 容器名/容器ID
# 重启一个容器
docker restart 容器ID/容器名
2.3.3 删除
# 删除一个容器
docker rm -f 容器名/容器ID
# 删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
# 删除全部容器
docker rm -f $(docker ps -aq)
2.3.4 进入/退出容器(linux进入,退出容器)
# 进入方式一
docker exec -it 容器名/容器ID /bin/bash
# 进入方式二
docker attach 容器名/容器ID
# 退出方式一
#-----直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
exit
# 退出方式二
# 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q
3、docker 安装mysql
3.1 先去DockerHub查找容器
搜索mysql
![image][tmp]
3.2 拉取镜像
docker pull mysql # 最新版
docker pull mysql:5.7 # 指定版本
3.3 创建mysql实例
镜像拉取完成后,用该镜像创建mysql实例,使用下面的命令来创建,复制,root用户下直接执行
sudo docker run \
-p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/config.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数介绍:
sudo docker run \ # \ 换行
-p 3306:3306 --name mysql \ # 将容器的3306端口映射到主机的3306端口
-v /mydata/mysql/log:/var/log/mysql \ # 将容器中的日志文件夹挂载到主机对应的/var/log/mysql文件夹中
-v /mydata/mysql/data:/var/lib/mysql \ # 将容器中的数据文件夹挂载到主机对应的/var/lib/mysql文件夹中
-v /mydata/mysql/conf:/etc/mysql \ # 将容器的配置文件夹挂载到主机对应的/etc/mysql文件夹中
-e MYSQL_ROOT_PASSWORD=root \ # 设置初始化root用户的密码
-d mysql:5.7 # -d:以后台方式运行实例 mysql:5.7:指定用这个镜像来创建运行实例
3.4 配置mysql
进入 mysql 挂载目录
cd /mydata/mysql/conf
创建并打开 mycnf vi my.cnf
编辑以下内容 ,保存退出并重启 mysql
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
3.5 设置随docker启动
docker update mysql --restart=always
4、docker 安装redis
4.1 拉取镜像
docker pull redis
4.2 创建实例并启动
# 1. 创建redis配置目录
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
# 2. 启动redis容器
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
## 4.3 redis持久化 在 /mydata/redis/conf/redis.conf文件里添加 ```shell appendonly yes # 保存退出 ```
改完重启
4.4 设置随docker 启动
docker update redis --restart=always
5、docker 安装gitlab
5.1 拉取镜像
docker pull gitlab/gitlab-ce
5.2 创建实例并启动
docker run -d -p 443:443 -p 8082:80 -p 222:22 --name gitlab \
--restart always \
-v /mydata/gitlab/config:/etc/gitlab \
-v /mydata/gitlab/logs:/var/log/gitlab \
-v /mydata/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
主要参数说明:
-d: 后台启动
-p 8082:80 : -p端口映射,将容器的80端口映射到宿主机的8082,也就是说当你安装成功后通过IP:8082可以访问gitlab
-p 8022:22 #将容器内22端口映射至宿主机8022端口,这是访问ssh的端口
-p 8443:443 #将容器内部端口向外映射
--name gitlab 给你的容器命名为gitlab 方便后续操作,毕竟通过容器ID进行操作过于麻烦
-v /gitlab/config:/etc/gitlab 文件映射-将容器内部的/etc/gitlab映射到宿主机的/mydata/gitlab/config
最后 gitlab/gitlab-ce 你是根据那个镜像启动的该容器(也就是你上面拉取的gitlab的镜像名)
## 5.3 配置gitlab
进入 /mydata/gitlab/config 目录,执行vi gitlab.rb
,插入(8082和80 已经映射过,所以只配ip)
# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://192.168.31.131'
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '192.168.31.131'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run时22端口映射的222端口
5.4 查看gitlab的root密码
# 进入容器
docker exec -it gitlab bash
# 不想看直接跳过修改
# 进入目录
cd /etc/gitlab/
# 查看密码命令
cat initial_root_password
5.5 修改root密码
# 进入控制台
gitlab-rails console -e production
# 查询id为1的用户,id为1的用户是超级管理员
user = User.where(username:"root").first
user.password='123456'
user.save!
# 退出
exit;