演示环境:阿里云 Cenos 7,其他环境大同小异
其实 Linux 安装和使用 docker 是很简单的,几乎都是傻瓜式安装了。所以第一次安装 docker 也不要慌张。
这篇文章确实有点长,但是只要你看完,你应该会觉得是很详细的,此文章合适于初次使用者,那让我们开始吧!
其实我们还是得养成一种习惯,就是学习新的东西先去阅读一下官方文档,看看人家官方是怎么介绍的。官方文档地址。
因为这一行业是需要我们有自学新东西的能力的,所以推荐自己去看看官方文档里是怎么样安装使用 Decker 的,另外官网上还有各个发行版的安装教程:
官方中提到有三种安装的方法:但是大多数用户会设置 Docker 的存储库并从中进行安装,以简化安装和升级任务。这是推荐的方法。那我们就已这种简单的安装形式来安装 Docker。
使用存储库安装演示:
1、使用远程连接工具连接上服务器,我使用的是 Xshell ,这款工具还是值得推荐的。安装 Xshell 远程连接工具;
如果已安装过 docker,请卸载它们以及相关的依赖项,卸载旧版本:(ps:以下的命令都可以直接复制粘贴再运行的)
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、使用命令 uname -r
查看当前服务器 CentOS 系统的内核版本,版本要高于 3.10 或者是CentOS 7及以上才可以安装使用 docker 哦!
uname -r
在新主机上首次安装Docker Engine之前,需要设置 Docker 存储库。之后,您可以从存储库安装和更新Docker。
3、设置存储库,安装 yum-utils
软件包(提供 yum-config-manager
实用程序)并设置稳定的存储库。
yum install -y yum-utils
下面两个源二选一即可。
docker官方镜像源(不推荐)
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
docker阿里镜像源(推荐)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
执行之后就会去国外镜像下载安装 docker,这样下载会慢一些。所以下面这个命令是设置阿里云镜像下载docker。
准备工作已完,下面正式安装 docker!
4、安装 Docker 引擎。
安装方式一 :安装最新版本Docker ,命令 yum install docker-ce docker-ce-cli containerd.io
yum install docker-ce docker-ce-cli containerd.io
还有一个提示,直接输入 y ,即可。到这里 Docker 已安装完成但尚未启动。
安装方式二 :安装指定版本,命令 yum list docker-ce --showduplicates | sort -r
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
命令中的 VERSION_STRING :通过其完全合格的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)到第一个连字符,以连字符(-)分隔。例如,docker-ce-18.09.1。完整命令如下:
yum install docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
5、使用 systemctl start docker
启动 docker,这时不会有任何显示的;
systemctl start docker
6、选做操作:通过运行 hello-world
映像来验证是否正确安装了 Docker Engine 。
docker run hello-world
此命令下载测试图像并在容器中运行它。容器运行时,它会打印参考消息并退出。
也可以输入 decker -v 查看一下版本,能够查看到 docker 的版本,说明 docker 已经启动成功;
docker -v
7、选做操作:设置开机(服务器)启动 docker 命令:systemctl enable docker
,这样下次重启服务器就直接打开了,这一步非必须设置;
systemctl enable docker
与之对应的是开机不自启动,命令 systemctl disable docker
8、使用命令 systemctl stop docker
即可关闭 docker;
systemctl stop docker
重启 docker 服务,这个命令也很重要,当你使用 docker 出现以下错误时就可以使用这个命令来尝试着解决:
service docker restart 或者使用 systemctl restart docker
错误:Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon running?
我之前也遇到过这个错误,当前直接重启服务器来解决的,在网上也没有查询到相关的解决的办法,后来在 stackoverflow 网站上看到这个问题,那个人就是使用命令 service docker restart
来重启 docker ,出现问题的原因,他说可能是使用 docker 中没有正确关闭 docker 所致。
这里顺便说一下,以上对 docker 操作的命令都是用 systemctl
,这命令是通用的
systemctl start xxx # 开启xxx服务
systemctl stop xxx # 关闭xxx服务
systemctl enable xxx # 开机自启xxx服务
systemctl disable xxx # 开机禁自启xxx服务
systemctl restart xxx # 重启xxx服务
好了,以上就是对 docker 的安装和关闭介绍!接下来说一说彻底删除 docker 的操作:
9、卸载 docker ,你现在不要操作这一步,不然刚刚就白安装了!
(1)卸载 docker Engine、Containerd软件包:
yum remove docker-ce docker-ce-cli containerd.io
(2)主机上的映像,容器,自定义配置文件不会自动删除。要删除所有图像,容器,您必须手动删除所有已编辑的配置文件。卸载所有文件:
rm -rf /var/lib/docker
明确一下 :docker 容器和 docker 容器里面的各个镜像容器是不一样的概念,比如说 mysql 这些只是一个安装或者运行在
docker 里的一个子容器罢了,以上是我们在 Linux 上安装和运行和删除 docker 容器,下面我们来安装和管理 docker里的镜像!
这一步是在我们刚刚安装的 docker 中安装相应的镜像,比如说,我们要在 docker 容器中安装 Mysql:
在 docker 中安装 Mysql 镜像的常见操作:
操作 | 命令 | 说明 |
---|---|---|
检索 | docker search + 关键字(如:docker search redis) | 就是去 docker 仓库(Docker Hub)里搜索指定的镜像 |
拉取 | docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认是latest |
列表 | docker images | 查看所有下载的本地镜像 |
删除 | docker rmi image-id | 查看镜像的 id,根据 id 删除指定的镜像 |
上图的解释:
(1)关键字:你要安装的镜像的名字,例如,安装 MySQL 就是 mysql,安装 Redis 就是 redis;
(2)镜像名:就是搜索到的镜像详细信息中的镜像名字,tag:是指定你要下载哪一个版本,假如你不写这个 tag 的话,就是默认使用 latest ,就会下载到最新的版本;
1、检索:命令 docker search mysql
(已 MySQL镜像下载为例演示)
docker search mysql
这些信息都可以在 docker 的官网上查询到的,搜索 Docker Hub 就可以查看到,必要时注册一个 docker 的账号。
官网直接搜索 mysql 的结果:
2、拉取:命令 docker pull mysql
(默认是 latest ,下载最新版),这一步就是下载 MySQL;
docker pull mysql
这就是在下载了,这一步会花费一点时间,等待一下,大概一分钟吧。假如你拉取很慢,或者失败的话,继续往下看。
下面演示下载指定其他版本,你可以不做这一步,我只是为了演示:
docker pull mysql:5.7
拉取(下载镜像)很慢或者失败: 此时你可以先暂停当前下载,使用 ctrl + C
暂停拉取。此时你可以重新拉取,多试一次也许速度就快了。假如你重试了还是慢,那么你换为 docker 中国官方镜像进行拉取,使用 docker pull xxx
这种方式是从美国镜像过来的,所以速度可能不是很快,所以你可以尝试使用 docker 中国镜像通过命令 docker pull registry.docker-cn.com/myname/myrepo:mytag
进行拉取。比如说:
docker pull registry.docker-cn.com/library/mysql
或者
docker pull registry.docker-cn.com/library/redis
推荐设置:还可以直接将 docker 下载镜像设置为国内镜像,这样就可以使用 docker pull xxx 命令快速下载了。设置见这篇文章。
3、列表:命令 docker images
查看安装的所以本地镜像;
docker images
4、删除:命令 docke rmi IMAGE ID
(指定要删除的镜像)
docker rmi IMAGE ID 或者 docker rmi (image_name + version)
假如你出现一个软件不同版本 ID 还相同的情况,使用 ID 删除不了相应的镜像时,就按照它的名字 + 版本来删除,演示如下:
1、先安装一个 Tomcat 来演示它的启动;
操作 | 命令 | 说明 |
---|---|---|
运行 | docker run --name 自定义名字 -d 镜像名 | - -name:自定义容器名、-d:后台运行 |
列表 | docker ps(查看运行中的容器) | 加上 -a ,可以查看所有容器(正在运行的,没有运行的) |
停止 | docker stop 自定义的名 / 容器 id | 停止当前运行的容器 |
启动 | docker start 自定义名 / 容器 id | 启动容器 |
删除 | docker rm 自定义名 | 删除指定容器 |
端口映射 | -p 8081:8080(Tomcat) | -p:安装docker的主机端口(映射到)容器内部的端口 |
容器日志 | docker logs 自定义名字 / 容器 id | 查看指定镜像的日志 |
注意:在命令中,可以是简写镜像ID。docker 显示出来的镜像ID和容器ID都是一个12位的随机字符,我们的命令中,只要可以对命令操作镜像和容器作一个唯一标识,那么就行。譬如说:
2、演示以上的操作:
[root@daiyu ~]# docker images //查看所有镜像
[root@daiyu ~]# docker run --name mytomat -d tomcat:latest //运行指定镜像
[root@daiyu ~]# docker ps -a //查看镜像,要是关闭状态也会显示出来,只是状态是 Exited
[root@daiyu ~]# docker stop 74c085246408 //这个 id 是从以上赋值的
[root@daiyu ~]# docker ps -a
[root@daiyu ~]# docker ps
[root@daiyu ~]# docker start 74c085246408
[root@daiyu ~]# docker ps
[root@daiyu ~]# docker rm 74c085246408 //删除运行的容器,不是删下载的镜像
3、删除运行的容器(是在停止容器之后的操作),命令 docker rm + 容器 id
,删除之后就会上面我们有一个 rmi 命令,那个是删除下载的镜像。
那么运行一个镜像之后,停止和删除它的操作就是:
注意:此时启动的 Tomcat 外部是不可以访问到的,因为我们还没有做一个端口号映射。
4、为了外部可以直接访问到我们的Tomcat 得要开启相应端口的防火墙,以映射到内部的 Tomcat 端口
5、关闭防火墙的命令 service firewalld stop
,但是此命令临时的,重启服务器就不会继续生效。还是建议防火墙只允许放行指定端口,简单的设置见,这篇文章。
systemctl stop firewalld # 临时关闭防火墙
systemctl status firewalld # 查看防火墙运行的信息
firewall-cmd --state # 查看防火墙运行状态
firewall-cmd --list-ports # 查看当前开放的端口集合
6、可能出现的问题:在使用过程中,假如使用命令 docker images
出现了两条完全一样的 image(镜像)时,请查看这篇文章解决。这时候你就得换一个版本的镜像安装了。
当你出现了一个镜像(image)出现好几个 ID 相同的条目时,我之前的做法直接是直接卸载掉当前的 docker 然后换一个低一个版本的 docker 进行安装,然后重新下载镜像,有点暴力但是很有效,看你舍不舍得删除当前的 docker 吧!
下面来正式启动一个外部可以访问的 Tomcat
7、一个外部可访问的 Tomacat 运行命令 docker run --name myTomcat01 -d -p 8081:8080 tomcat
注意:这种启动方式是没有使用挂载文件的方式启动的,在真实的开发环境中应该使用 -v 命令挂载形式去启动相应的镜像。
docker run --name myTomcat01 -d -p 8081:8080 tomcat
参数 | 说明 |
---|---|
- -name | 自定义容器名,便于之后启动.关闭.删除.重启该容器,非必须.不起系统会自动创建一个id |
-d | 表示容器在后台运行 |
-p | 安装docker的主机端口:容器内部的端口 |
-v | 安装docker的主机目录映射到容器内部目录 |
注意:以上这个命令只是启动tomcat最简单的命令,开发中有可能还要对容器中数据文件夹、配置文件夹、日志文件夹的等路径与宿主机的物理地址做一个数据互通、数据共享,也就是使用数据卷
(命令 -v
)来挂载启动容器。
由于这一块的知识还是比较多的,于是我就专门还写了一篇关于启动容器的文章。详细见这。
先去服务器上添加一下相应的安全组,不然是访问不到的:
然后在浏览器直接访问,路径为:服务器ip + : + 端口号 ( / + 项目名), 如:47.93.5.123:8081/
这里要注意两点,一是要设置安全组,二是要关闭防火墙。
8、使用命令 docker logs ID
打印当前的日志。
docker logs -f 镜像ID
9、进入容器内部
,查看启动容器的内部文件
docker exec -it 容器ID bash
一般建议直接把这些要查看,要持久化的数据文件直接使用数据卷挂载到宿主机的文件路径上。
10、还可以同时多个 tomcat ,只需换一个端口即可;如:
docker run --name myTomcat02 -p 8082:8080 -d tomcat
docker run --name redis_name -d -p 6379:6379 镜像ID --requirepass "password"
还可以使用可视化工具 Redis Desktop Manager 远程连接 docker 容器中开启的 Redis 服务。免费下载及使用这款可视化工具。
其实安装这些东西都是很简单的,建议去官方文档里逐一查看,比如说启动 MySQL 要写一个密码,这些官网都是说得很详细的,另外附上官方文档地址:https://hub.docker.com/
最后说一下我之前遇到的一个小问题,对于初学者可能有用,首先使用简单命令启动运行 mysql 镜像:
docker run --name mysql01 -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD=123456 mysql_id
详细MySQL、redis 详细的启动,加文件映射见这篇文章。
运行之后就可以用远程连接MySQL的工具进行连接了,这时假如说报错连接不上,其中一个原因就是你的连接工具版本太低了。此时可以升级连接工具的版本,也可以把MySQL的版本降低到 8 版本以下,比如说 mysql 5.7.31。假如你拉取的版本不一样但是镜像的 ID 还是一样时,要删除的话就得按照这篇文章删除镜像时出现的问题解决方法来删除了,不然是删除不了的。问题说完了。
我觉得学会一种好的学习方法比什么都重要。希望对你有用!感谢阅读完。
有用点个关注,手留余香!