Docker安装及入门

环境说明

本文使用centos7.7构建docker。
Docker要求操作系统必须为64位,且centos内核版本为3.1及以上。

安装docker

安装依赖软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

# 安装前可查看device-mapper-persistent-data 和 lvm2 是否已经安装
rpm -qa | grep device-mapper-persistent-data
rpm -qa | grep lvm2

设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

更新yum软件包索引

yum makecache fast

安装最新版本docker-ce

yum install docker-ce -y

#安装指定版本docker-ce可使用以下命令查看
yum list docker-ce.x86_64  --showduplicates | sort -r

# 安装完成之后可以使用命令查看
docker version

启动docker服务,

systemctl start docker

添加镜像地址,方便快速下载。
找到/etc/docker目录下的daemon.json文件,没有则直接vi daemon.json,添加如下内容:

{ 
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] 
}

构建mysql容器

我们利用官方提供的镜像来构建mysql。

首先去官网docker_hub搜索mysql所有版本。

本文使用最新的8.0.18版本。通过如下命令获取镜像:

docker pull mysql:8.0.18

在官网对应镜像的下方是有使用介绍的,参照官网说明,输入如下命令,启动mysql:

//其中3307代表宿主机的端口,3306代表容器的端口
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=你的密码不加引号 -p 3307:3306 -d mysql:8.0.18

通过如下命令查看运行的容器:

//查看运行的容器
docker ps
//查询结果
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
57cdd4b78e0d        mysql:8.0.18        "docker-entrypoint.s…"   23 minutes ago      Up 20 seconds       33060/tcp, 0.0.0.0:3307->3306/tcp   mysql01
//查看所有容器
docker ps -a

运行成功后,可以通过如下几个命令,来停止、删除、启动容器。

//停止容器
docker stop 容器名/容器id
//启动容器
docker start 容器名/容器id
//删除容器
docker rm  容器名/容器id

假如新增的容器有问题,可以删除后,重新添加一个容器

通过如下命令,查看宿主机端口占用

netstat -ntlpu

//查看结果
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      968/sshd            
tcp6       0      0 :::3307                 :::*                    LISTEN      1709/docker-proxy   
tcp6       0      0 :::22                   :::*                    LISTEN      968/sshd            
udp        0      0 127.0.0.1:323           0.0.0.0:*                           700/chronyd         
udp6       0      0 ::1:323                 :::*                                700/chronyd  

然后我们使用navicat连接mysql,发现会报错,这个问题是因为mysql8导致的,假如是5.多的版本是没问题的。

mysql8需要对其进行一些配置。

首先通过命令,进入mysql容器的命令行:

docker exec -it mysql01 /bin/bash

执行完该命令后,命令行发生了如下变化:

[root@client1 ~]# docker exec -it mysql01 /bin/bash         
root@18f1aa52c133:/# ls

可以理解为,从宿主机的命令行,切换到了mysql8.0.18容器的命令行。你可以把它想成另一个centos系统。

然后进入mysql命令行:

mysql -u root -p

密码是在上边我们初次运行容器时设置过的密码。

进入mysql命令行后,我们需要执行如下3个命令,

//给root用户授予所有的权限,假如root用户已经是所有权限了,这部可以省略
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
flush privileges;
//默认的是caching_sha2_password,需要修改为mysql_native_password,否则连接报错
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

通过quit命令,退出mysql。

通过exit命令,退出当前容器命令行。

现在再用navicat连接,应该不会报错了。如果还是报错,也可以进入容器命令行,查看mysql日志,分析问题如何解决。

容器备份及迁移

上边我们对官方的mysql8.0.18镜像做了修改,修改的方式是启动mysql8.0.18容器,修改容器内容。

那么假如别的服务器也需要修改后的容器内容该怎么办呢?有两种方式,可以通过构建私有仓库。这里就不演示。

还有一种方式,就是将修改后的容器保存为一个镜像,然后将镜像生成tar包,拷贝到其他服务器上。

在拷贝到的服务器上重新加载镜像即可。

首先将修改后的容器保存为镜像:

docker commit f8f3c367eb24(当前容器id,通过docker ps -a查看) mysql02:v1.0(保存的镜像名称及tag)

可以通过如下命令查看修改后容器的变更内容:

docker diff 容器id

通过如下命令,将镜像保存为tar包

docker save -o mysql02.tar(tar包名称) mysql02:v1.0(镜像名称)

保存的地址就是当前宿主机的命令行位置。

通过如下命令来加载tar为镜像

docker load --input tar包全名

然后通过如下命令查看是否加载成功

docker images

以上的方式只是举个例子,对于mysql的官方镜像,它的Dockfile文件是固定的,每次运行mysql镜像它都会重新初始化数据库,所以我上边举的例子,是不适用这块的。而且在开发中,不太鼓励使用commit这种方式修改现有容器,使其成为新的镜像。还是鼓励使用Dockfile方式构建镜像。

Dockfile构建镜像

这种方式是最常用的。使用Dockfile构建镜像时,尽量构建单一镜像,单一的意思是不要把很多应用都放在一个镜像里,比如jdk和mysql、tomcat。尽量分别构建镜像。这样更灵活。而且Docker本身是轻量级的,不适合在一个镜像里构建太多东西。

 构建的文章参考:https://blog.csdn.net/qq_28710983/article/details/80964519

使用Docker的注意事项

这篇文章写的不错:https://www.cnblogs.com/zuxing/articles/9554093.html

Docker命令大全

参考:https://www.runoob.com/docker/docker-command-manual.html

Dock和K8S

参考:https://blog.csdn.net/qq_38987057/article/details/85263234

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值