持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。在Selenium Grid4 使用指南(三)中就是使用docker运行了selenium grid的hub/node。本节主要说明Docker的安装及基本用法。
安装Docker Desktop(可选)
Docker Desktop提供了一个可视化操作界面,使得Docker运行起来非常简单,并且目前支持跨平台安装了。访问Docker 官网,根据自己的操作系统进行下载(Mac M1及以上系统,要安装Apple Chip版本,其他的安装Inter Chip版本)。
下载后根据提示安装即可,这里根据提示安装了Mac版本的,感兴趣的可以自己下载安装尝试。因为大多数还是在Linux服务器上使用Docker,因此本章还是主要讲解在Linux服务器上安装Docker和基本用法。
安装Docker(Linux)
手动安装的脚本非常多,大家可根据自己的操作系统进行搜索,这里提供两种使用安装脚本自动安装的方式 安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
安装完成后,通过docker --version版本,可正常展示docker版本则说明安装成功。
[root@iZwz95h9ihcvtbglpnnhx9Z ~]# docker --version
Docker version 20.10.18, build b40c2f6
基础用法(nginx容器为例)
Docker安装完成后就可以进行使用了,这里以使用nginx镜像为例,演示其基础用法。
- 登录Docker Hub,这是官方提供的Docker镜像仓库,可以从上面找到其他人提供的镜像,也可以将自己制作的镜像上传到仓库中,供其他人使用。
- 在Docker Hub中搜索
nginx,会搜索出很多结果,带Docker Official Image标签的是官方提供的镜像,选择这个官方镜像查看详情。详情中可以看到它的基本使用方法供大家使用时参考。
- 找到想要的镜像后,通过命令
docker pull nginx拉取最新的nginx镜像,下载完成后,可以使用命令docker images查看服务上所有的镜像,检查是否安装成功。
- 使用命令
docker run --name mynginx nginx启动容器,并且命名为mynginx
看到日志启动成功后,可以新开一个终端,通过命令docker ps查询当前服务器允许的容器
可以看到容器内nginx的默认端口为80,但是此时容器内的端口还没有映射到服务器上,所以无法通过http://服务器IP:80访问nginx,因此需要在启动参数中添加端口映射,使用-p 服务器端口:容器内端口进行设置。
在第一个终端中输入Ctrl+C关闭nginx进程,然后使用命令docker rm mynginx删除之前的容器,输入命令docker run --name mynginx -p 80:80 nginx再次启动新容器。
现在就可以在浏览器输入网址http://服务器IP:80,可以看到nginx的默认页面了,说明启动成功。
- 上面提到在nginx输出日志的终端,输入
Ctrl+C就关闭nginx进程,但是在实际使用过程中,通常都是再后台运行进程的,在docker中可以在启动参数中添加-p参数完成后台启动容器的效果。
可以看到这次没有直接输出nginx的日志了,然是输出了一串编码,这个编码就是容器的完整编码。再次通过命令docker ps查看启动的容器
可以看到容器是成功启动的,然后可以通过命令docker logs mynginx查看容器的日志,可以看到跟之前直接启动nginx容器一样的日志,如下
- 通过命令
docker exec -it myginx /bin/bash可以进入nginx容器中的端口,这里通过修改nginx的默认页来了解其他的一些基本命令。
成功进入容器的终端之后,可以查看nginx的配置文件,通常是在/etc/nginx目录下
但是容器终端基本都是简化的,很多命令都是没有的,所以需要使用命令docker cp CONTAINER:SRC_PATH DEST_PATH容器内的配置拷贝到服务上。然后在容器终端通过命令exit退出。
然后就可以在服务器上查看nginx的配置文件了
从配置文件conf.d/default.conf可以看出来nginx的默认首页在/usr/share/nginx/html/index.html。
这里我们自己写一段简单的html代码,如下,然后保存。
<html>
<body>
<h1>自定义nginx首页</h1>
<p>Hello World</p>
</body>
</html>
- 接下来要做的就是用这个文件把容器内的index.html文件覆盖,可以在启动命令中通过
-v 服务器目录:容器目录将服务器文件挂载到容器内
先关闭容器,删除容器
然后启动容器,如下
- 再次在浏览器中访问nginx,可以看到默认首页已经被我们自定义挂载的文件覆盖了。
可以看到上面出现了中文乱码,现在我们直接修改服务器上的index.html文件,如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<h1>自定义nginx首页</h1>
<p>Hello World</p>
</body>
</html>
文件修改后保存,然后使用命令docker restart mgnginx重启容器
重启成功后,刷新浏览器,可以看到中文乱码问题被解决了。
- 上面每次新增参数启动容器时,为避免命名冲突,都需要先使用命令
docker stop container_name和docker rm container_name停止并删除容器,如果想要在停止容器的时候就直接删除容器,可以在启动参数中添加--rm参数。
总结
上面Nginx的例子中,共使用了下面几种docker命令,汇总如下:
docker pull image_name拉取对应名称的镜像docker images查看已经拉去的镜像docker run xxx image_name启动镜像,它的参数非常多,上面只介绍了几种常用的,感兴趣的可以直接使用docker run --help查看它支持的参数。这一步也可以不提前拉取镜像直接启动,docker会自动判断启动的镜像是否存在,不存在就进行拉取docker ps查看启动的容器,如果想查看所有的容器(包括停止的),可以使用命令docker ps -adocker stop container_name停止对应名称的容器,运行中的容器是不允许直接删除的docker rm container_name删除对应名称的容器,服务上的容器不允许同名docker restart container_name重启对应名称的容器docker logs container_name查看对应名称容器的日志docker exec -it container_name /bin/bash进入容器内的交互终端,通过exit命令退出docker cp CONTAINER:SRC_PATH DEST_PATH将容器内指定目录文件拷贝到服务器上docker cp SRC_PATH CONTAINER:DEST_PATH将服务器上指定目录文件拷贝到容器内