Docker 是一个开源的应用容器引擎,使用容器化技术,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上。实质上,容器内的应用还是直接运行在宿主机上,各个容器之间相互隔离。
Docker 是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例。
Docker 安装
安装
- yum 包更新到最新
yum update
- 注:若 Linux 虚拟机未配置网络,则可以通过查看另一篇博客配置网络:在 VM 虚拟机中 Linux 动态网络配置_ZOOM_Jie -CSDN博客。
- 安装需要的软件包,yum-util 提供 yum-config-manager 功能,另外两个是 devicemapper 驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
- 设置 yum 源为阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装 Docker 社区版
yum -y install docker-ce
- 查看 Docker 版本号
docker -v
设置 USTC 镜像
- 编辑
/etc/docker/daemon.json
文件
mkdir -p /etc/docker vim /etc/docker/daemon.json
- 注:通过 yum 安装 vim:
yum -y install vim*
。 - 在
daemon.json
文件中输入以下内容:
{ "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"] }
启动 Docker
- 启动 docker
systemctl start docker
- 停止 docker
systemctl stop docker
- 查看 docker 状态
systemctl status docker
- 查看 docker 具体信息
docker info
- 查看 docker 帮助文档
docker --help
- 设置开机自动启动 docker
systemctl enable docker
Docker 常用命令
镜像命令
- 查看镜像
docker images
- 搜索镜像
docker search centos
- 拉取镜像
docker pull 镜像名称(repository):版本(tag)
注:拉取镜像不加版本 (:7)
即默认拉取最后一个版本。
- 删除镜像
按镜像 ID 删除镜像
docker rmi ImageID
删除所有镜像
docker rmi docker images -q
容器命令
- 启动容器
docker start [容器名/id]
- 停止容器
docker stop [容器名/id]
- 查看正在运行的容器
docker ps
- 删除容器
docker rm [容器名/id]
- 查看所有容器
docker ps -a
- 查看最后一次运行的容器
docker ps -l
- 查看停止的容器
docker ps -f status=exited
- 查看停止的容器
docker ps -f status=exited
- 创建容器
docker run
-i
:表示运行容器。
-t
:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name
:为创建的容器命名(唯一)。
-v
:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d
:在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加 -i,-t 两个参数,创建后就会自动进去容器)。
-p
:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射。
- 交互式方式创建容器
docker run -it --name=容器名 [镜像名称]:[版本] /bin/bash
- 这时我们通过 ps 命令查看,发现可以看到启动的容器,状态为启动状态
- 守护式方式创建容器(后台运行)
docker run -di --name=容器名 [镜像名称]:[版本]
进入命令行
docker exec -it [容器名/id] /bin/bash
10.退出当前容器
exit
11.拷贝主机文件到容器
docker cp [文件] [容器名/id]:[目录]
12.拷贝容器文件到主机
docker cp [容器名/id]:[文件路径] [copy文件重命名]
13.容器目录挂载(映射)
docker run -di -v [主机目录]:[容器目录] --name=容器名 [镜像名称]:[版本]
14.查看容器详细信息
docker inspect [容器名/id]
过滤信息
docker inspect --format='{{.[字段].[key]}}' [容器名/id]
Docker 应用部署
MySQL
- 查询 MySQL 镜像
docker search mysql
- 拉取 MySQL 镜像,以 MySQL 5.7 版本为例
docker pull mysql:5.7
- 创建 MySQL 容器
docker run -di --name=[容器名] -p [主机端口]:[容器端口] -e MYSQL_ROOT_PASSWROD=[管理员账户密码] [镜像名称]:[版本]
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
-di
:守护方式创建容器
-p
:主机与容器的端口映射
-e
:直接设置容器的用户名密码
- 进入 MySQL 容器命令行
docker exec -it [容器名] /bin/bash • 1
docker exec -it mysql /bin/bash
docker exec -it mysql /bin/bash
- 在 MySQL 容器中进行操作(以下命令皆是在==容器的命令行【root@b2494be91470:/#】==执行)
- 登录 MySQL
mysql -uroot -proot --default-character-set=utf8 • 1
- SQLYog 连接容器中的 MySQL
到此 MySQL 容器就部署完成了
Nginx
- 查询 Nginx 镜像
docker search nginx
- 拉取 Nginx 镜像
docker search nginx
- 创建 Nginx 容器
docker run -di --name=[容器名] -p [主机端口]:[容器端口] [镜像名称]:[版本]
docker run -di --name=nginx -p 80:80 nginx
-di
:守护方式创建容器
-p
:主机与容器的端口映射
- Windows 浏览器访问 【主机IP地址:80 】
- 到此 Nginx 容器就部署完成了
- 修改 Nginx 容器的配置文件
- 将容器中的 nginx 目录复制到主机,改完再复制回去
docker cp [容器名/id]:[文件路径]
docker cp [文件] [容器名/id]:[目录]
- 将容器目录挂载到主机(需要在创建容器的时候挂载)
docker run -di --name=容器名 -p [主机端口]:[容器端口] -v [主机目录]:[容器目录] [镜像名称]:[版本] docker run -di --name=nginx -p 80:80 -v /usr/local/mydata/conf/:/etc/nginx nginx
Redis
- 查询 Redis 镜像
docker search redis
- 拉取 Redis 镜像
docker pull redis
- 创建 Redis 容器
docker run -di --name=[容器名] -p [主机端口]:[容器端口] [镜像名称]:[版本]
docker run -di --name=redis -p 6379:6379 redis
-di
:守护方式创建容器
-p
:主机与容器的端口映射
- 使用 Another Redis Desktop Manager 连接 Redis
输入主机 IP 地址与容器映射的端口号,点击 OK 成功连接,查看信息
- 到此 Redis 容器就部署完成了
- 修改 Redis 容器的配置文件
- 将容器中的 Redis 目录复制到主机,改完再复制回去
docker cp [容器名/id]:[文件路径]
docker cp [文件] [容器名/id]:[目录]
- 将容器目录挂载到主机(需要在创建容器的时候挂载)
docker run -di --name=容器名 -p [主机端口]:[容器端口] -v [主机目录]:[容器目录] [镜像名称]:[版本]