Docker
1. 前置准备
在学习Docker之前我们需要具备以下环境:
- Linux云服务器 / 虚拟机
- 安装并配置Docker环境(命令行中输入docker -v能够显示对应版本证明安装成功)
2. 快速入门
要求:
我们先来尝试使用Docker创建MySQL服务,命令如下:
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
其中各个选项的含义如下:
docker run -d
:表示创建并运行一个容器,并且使用后台进程的方式运行(daemon)--name
:给该容器取一个名称,只要不与别的容器名冲突即可-p
:指定端口映射,即将宿主机端口映射到容器内部端口,格式为:宿主机端口:容器内端口
-e TZ=Asia/Shanghai
:-e
即environment环境,格式为:-e key=value
,此处设置时区-e MYSQL_ROOT_PASSWORD=123
:此处表示设置MySQL的默认密码mysql
:设置镜像名称,docker就会根据这个名字来搜索并下载镜像,格式为REPOSITORY:TAG
,例如mysql:8.0,未指定TAG默认为latest
如果我们需要安装其他软件,则可以到DockerRepository网站中进行查找与配置
Docker仓库网站:https://hub.docker.com/
3. 常见命令
下面我们就来介绍一下Docker的常见命令,本次只介绍部分常用命令,更多更全的命令请查阅官方文档:
Docker官方文档:https://docs.docker.com/
3.1 命令介绍
命令 | 说明 |
---|---|
docker push | 向远程仓库推送镜像 |
docker pull | 拉取镜像 |
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker run | 创建并运行容器 |
docker start | 启动已经关闭的容器 |
docker stop | 停止正在运行的容器 |
docker restart | 重新启动容器 |
docker rm | 删除指定容器 |
docker logs | 查看容器日志 |
docker ps | 查看容器进程运行情况 |
docker exec | 进入容器 |
docker inspect | 查看容器详细信息 |
上述常见命令及其关系我们可以用下图表示:
3.2 实操练习
下面我们就通过一个案例来练习上述命令:
- 拉取Nginx镜像:
命令:docker pull nginx
- 查看本地镜像列表:
命令:docker images
- 创建并运行Nginx容器:
命令:
docker run -d \
--name nginx \
-p 80:80 \
nginx
- 查看容器:
命令:docker inspect nginx
- 停止容器:
命令:docker stop nginx
- 再次启动容器:
命令:docker restart nginx
- 进入Nginx容器:
命令:docker exec -it nginx bash
- 删除容器:
命令:docker rm -f nginx
3. 数据卷
我们先来看一个需求,体会数据卷的必要性:
我们可以查阅docker hub上关于nginx的镜像,得知html所在目录为:/usr/share/nginx/html,此时我们使用命令docker exec -it nginx bash
进入容器,使用vim编辑器打开index.html发现报错:找不到命令vim,这是因为docker模拟运行环境时只会模拟必要的,因此vim等编辑器不是自带的!这时有两种解决方法:
- 安装vim编辑器(不推荐×)
- 借助数据卷
**数据卷:**docker中的volumn(数据卷)是一个虚拟目录,是宿主机目录与容器内部目录映射的桥梁
数据卷相关命令:
命令 | 说明 |
---|---|
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volumn inspect | 查看某个具体数据卷 |
docker volume prune | 清除数据卷 |
注意:已经创建好的容器是无法挂载数据卷的,因此我们需要在创建容器即(docker run)时指定挂载目录,如果对应数据卷不存在则自动创建!
挂载数据卷命令:
docker run -d \
--name nginx \
-p 80:80 \
-v html:/usr/share/nginx/html \
nginx
此时我们可以查看挂载信息:docker volume inspect nginx
此时宿主机目录( /var/lib/docker/volumes/html/_data)与容器内部目录(/usr/share/nginx/html)就建立了双向绑定关系,修改宿主机目录下的文件,容器内文件同样生效!