前言
重新换了服务器,要在centOS7上面安装Docker
。
其实安装Docker分为两种,一种是在线安装也就是本文介绍的内容;另一种是离线安装,适合没有办法联网的伙伴,详情可以直接查看文末的推荐链接。
安装Docker
Docker 要求 CentOS 系统的内核版本高于 3.10 ,验证你的CentOS 版本是否支持 Docker 。
#查看你当前的内核版本
uname -r
安装需要的软件包。
yum install -y yum-utils device-mapper-persistent-data lvm2
设置安装的源。
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y
建议直接下载最新稳定版,当然也可以下载指定版本。
#下载最新版本
sudo yum install docker-ce -y
#查看所有版本
yum list docker-ce --showduplicates | sort -r
#下载17.12.0版本的
yum install docker-ce-17.12.0.ce
启动并加入开机启动
#启动
systemctl start docker
#开机自启
sudo systemctl enable docker
使用语句查看已经自启的服务,如果列表中存在即为设置成功:
systemctl list-unit-files | grep enable
到这里,完成了安装。
配置Docker
修改源为中科大的镜像源,修改/etc/docker/daemon.json
文件内容为:
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
保存后,重启Docker,查看是否成功。
#重启
systemctl daemon-reload
systemctl restart docker
#查看docker状态
systemctl status docker
#查看docker配置
docker info
到这里就完成了配置。
使用Docker
这里以安装Mysql为例,进行讲解。
拉取镜像到本地
用Root账户搜寻想要的镜像,一般是选择标星最多的。
# 登陆root账户
sudo -i
#搜寻镜像
docker search mysql
#拉取镜像
sudo docker pull mysql
当然,如果不想要最新版本的,你也可以选择列出Tags。
# RepoName默认为官网docker库,镜像名为mysql,结果显示所有支持的tags
export RepoName=https://registry.hub.docker.com \
&& export ImagesName=mysql \
&& wget -q $RepoName/v1/repositories/$ImagesName/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}' | sort -u
然后你选择删除已经下载的镜像,重新拉取指定版本的镜像。
# 拉取指定版本的镜像
docker pull mysql:5.7.30
# 查看镜像
docker images
得到结果为:
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 3218b38490ce 7 months ago 516MB
mysql 5.7.30 9cfcce23593a 2 years ago 448MB
于是删除镜像
docker rmi 3218b38490ce
创建外部挂载目录
在用镜像创建容器之前,建议创建存储目录,来保存容器中的数据和配置信息,免得未来重启容器后就丢失数据了。
# 自定义新建的目录名
export MysqlName=mysql-5.7
# 指定配置目录、数据目录
mkdir -p /home/keen/docker/$MysqlName/conf
mkdir -p /home/keen/docker/$MysqlName/data
# 赋予权限
chmod -R 755 /home/keen/docker/$MysqlName/conf
配置容器
在/home/keen/docker/mysql-5.7/conf/
下创建文件my.cnf
。
vim /home/keen/docker/$MysqlName/conf/my.cnf
#先按`i`,底下出现一个"Insert"的文字。
复制内容如下,到命令行里黏贴。
[mysqld]
user=mysql
max_connections=1000
skip-name-resolve
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
之后按esc键
退出编辑模式;再输入英文冒号和字母组合:wq
保存并退出。
启动容器
docker run \
--name mysql5.7.30 \
-p 4306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
--restart=always \
--privileged=true \
-v /home/keen/docker/mysql-5.7/conf/my.cnf:/etc/mysql/my.cnf \
-v /home/keen/docker/mysql-5.7/data/:/var/lib/mysql \
mysql:5.7.30
-
--name mysql5.7.30
:容器名字为mysql5.7.30 -
-p 4306:3306
:映射宿主机的 4306 端口到容器服务的 3306 端口,本地就可以直接通过宿主机ip:4306
访问到 MySQL 的服务。 -
-e MYSQL_ROOT_PASSWORD=123456
:设置 MySQL 服务 root 用户的密码。 -
-d
:后台运行 -
--restart=always
:Docker 重启的时候容器也会重启 -
–privileged=true
:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限 -
-v /home/keen/docker/mysql-5.7/conf/my.cnf:/etc/mysql/my.cnf
映射配置文件 -
-v /home/keen/docker/mysql-5.7/data/:/var/lib/mysql
:映射数据目录 -
使用镜像mysql的5.7.30版本
使用容器
# 进入容器
docker exec -it mysql5.7.30 /bin/bash
# 进入数据库
mysql -u root -p
123456
新建用户
在远程服务器上面建立远程用户名为keenuser的用户,密码为123456。中间有踩过坑,新建的用户如果是localhost是无法远程登录的。
# 远程用户
create user keenuser@'%' identified by '123456';
#注意如果是localhost,则无法远程登录
create user keenlocaluser@localhost identified by '123456';
#删除本地用户
DROP USER 'keenuser'@'localhost';
新建数据库
建立一个数据库名字叫做nextcloud
。
# 新建数据库
create database nextcloud DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#授权在数据库nextcloud上面的所有权力给名为keenuser的用户
grant all privileges on nextcloud.* to keenuser@'%';
#刷新
flush privileges;
#退出Mysql
exit;
退出容器
#退出容器
exit;
停止与删除容器
停止并且销毁容器。
# 停止容器
docker stop mysql5.7.30
# 销毁容器
docker rm mysql5.7.30
# 强制销毁容器
docker rm -f mysql5.7.30
#停止并且销毁自定义容器
export TempName=mysql5.7.30
docker stop $TempName && docker rm $TempName
本地连接数据库
在本地连接远程服务器的数据库。
navicat
新建一个链接,如图即可测试成功。
Dbeaver
新建一个链接,输入信息后点击测试链接即可。
修改容器配置
修改端口
以上文的Mysql容器为例, 其中的8bb**
是容器的ID值,。
# 查看对应的ID
docker ps -a
#修改容器的配置文件
vim /var/lib/docker/containers/8bb0da5913626b58bca7335c446657c22ff09e309c85ae745d9fdbc4b5308f4c/hostconfig.json
打开文件后可以找到PortBindings
字段,即可修改端口映射。
{
"Binds": [
"/home/keen/docker/mysql-5.7/data/:/var/lib/mysql",
"/home/keen/docker/mysql-5.7/conf/my.cnf:/etc/mysql/my.cnf"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
// 端口映射
"PortBindings": {
"3306/tcp": [
{
"HostIp": "",
"HostPort": "4306"
}
]
},
// 重启策略
"RestartPolicy": {
"Name": "always",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": true,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": [
"label=disable"
],
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": null,
"ReadonlyPaths": null
}
注意:重启docker服务,可能会影响到其他在运行的容器!
systemctl restart docker
修改容器的名称
docker rename mysql5.7.30 mysql5.7.30_New
修改重启策略
如果你创建了某个容器,但是忘记配置随Docker服务重启而重启容器,那么除了像上文一样修改hostconfig
配置文件,还可以使用命令。
docker update --restart=always mysql5.7.30
快照
容器生成镜像
使用命令将容器8bb0da591362
保存为新的镜像,并添加提交人信息和说明信息。
# 查看容器情况
docker ps -a
# 用容器生成镜像快照
export CONTAINERID=8bb0da591362
export CONTAINERNAME=mysql:5.7.30
docker commit \
-a junkuang \
-m "migration to another" \
-p \
$CONTAINERID \
$CONTAINERNAME-back-`date +%Y%m%d`
# 查看镜像列表
docker images
-
-a junkuang
:提交人是君匡 -
-m "my first commit"
: 修改提交内容备注 -
-p
: 在打包容器为镜像时暂停运行 -
8bb0da591362
: 用容器ID选择指定容器,没有办法用容器名称 -
mysql:5.7.30-back
:备份镜像名
镜像保存
将镜像保存到指定目录的tar压缩包文件
# 查看镜像
docker images
# 镜像保存到压缩包
export IMAGEID=ec7c9fe9057f
export IMAGENAME=mysql-5.7.30-back-20220722
docker save \
-o /home/keen/$IMAGENAME.tar \
$IMAGEID
-
-o
: 指定压缩包文件名和路径 -
IMAGEID
:指定镜像ID
之后便可以用工具或者命令复制出来备份文件保存起来了。
#格式:scp 用户名@IP地址:文件所在路径 本地路径
#复制到本地下载目录
scp root@39.96.12.167:/home/keen/mysql-5.7.30-back-20220722.tar /Users/keen/Downloads
镜像恢复
复制备份镜像文件到新的服务器中,使用命令将tar包导成镜像。
# 复制文件
scp /Users/keen/Downloads/mysql-5.7.30-back-20220722.tar root@43.138.47.149:/home/keen/mysql-5.7.30-back-20220722.tar
#加载备份镜像,尖括号与文件名间无空格
docker load </home/keen/mysql-5.7.30-back-20220722.tar
#查看景象列表
docker images
#重命名导入的仓库和镜像
docker tag 90c277453e59 mysql:5.7.30-back-20220722
然后用这个镜像创建新的容器即可。
docker run \
--name mysql5.7.30back \
-p 4306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
--restart=always \
--privileged=true \
-v /home/keen/docker/mysql-5.7/conf/my.cnf:/etc/mysql/my.cnf \
-v /home/keen/docker/mysql-5.7/data/:/var/lib/mysql \
mysql:5.7.30-back-20220722
感谢
感谢现在的好奇,为了能成为更好的自己。