Docker入门
Docker介绍
什么是Docker
- 是一个开源的应用容器引擎,使用
Go语言编写 - 开箱即用,快速部署,可移植性强,环境隔离
为什么使用Docker
- 提供一次性的环境,例如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行;
- 快速动态扩容,使用Docker部署了一个应用,可以制作成镜像,然后通Docker快速启动;
- 组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用;
- 更好的资源隔离和共享
Docker的三个概念
image:就相当于是一个root文件系统container:镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,容器和容器之间的操作互不影响,处于隔离的环境repository:可看着一个代码控制中心,用来保存镜像,参考maven仓库
安装部署
关闭防火墙和selinux
- 要想外界能够访问,需要关闭防火墙和selinux
- 关闭防火墙命令
1 | systemctl stop firewalld.service |
- 关闭selinux
1 | 查看当前selinux状态(Enforcing为开启,Permissive为关闭) |
安装Docker
- 可以参考阿里云安装文档:https://help.aliyun.com/document_detail/51853.html
- 安装yum源中默认的Docker(一般不建议这么安装,安装社区版)
1 | yum -y install docker |
- 安装社区版Docker(docker-ce)
- 下载docker-ce的yum源
1 | wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
- 安装docker-ce
1 | yum -y install docker-ce |
- 检查docker是否安装成功,
docker version
Docker基本命令
- Docker环境信息
1 | 查看docker命令 |
- 管理Docker守护进程
1 | systemctl start docker #运行Docker守护进程 |
- 管理镜像
1 | 拉取镜像 |
- 管理容器
1 | 启动一个新容器 |
- Docker常用命令概览
1 | Docker环境信息 info、version |
配置镜像加速
26年最新国内镜像源
1 | sudo mkdir -p /etc/docker |
1 | sudo tee /etc/docker/daemon.json <<-'EOF' |
- 强制重启docker
1 | sudo systemctl daemon-reload |
添加阿里云镜像加速
- 打开阿里云管理控制台:https://cr.console.aliyun.com/ ,登录阿里云,搜索容器镜像服务,选择镜像加速器


- 在
/etc/docker目录下创建daemon.json文件
1 | touch daemon.json |
vi /etc/docker/daemon.json,在文件中插入如下内容

- 然后执行如下命令即可
1 | systemctl daemon-reload && systemctl restart docker |
Docker镜像
搜索镜像
- docker官方镜像地址:https://hub-stage.docker.com/
- 搜索镜像
1 | docker search <镜像名称> |
- 举例
1 | 搜索镜像并过滤是官方的 |
查看已拉取的镜像
- 查看已拉取的镜像
1 | docker images |
- 查看镜像的详细信息
1 | docker inspect <镜像名称>/<镜像ID> |
拉取镜像
- 拉取镜像
1 | docker pull <镜像名称> |
- 举例
1 | 拉取来自阿里云仓库的Apache镜像 |
删除镜像
- 删除镜像
1 | docker rmi -f <镜像名称> |
1 | 删除阿里云仓库的Apache镜像 |
修改镜像名称与标签
- 旧的镜像会保留,并生成一个新的镜像
- 新镜像的
IMAGE ID与旧镜像的IMAGE ID相同 - 如果要删除新镜像时,需要使用
docker rmi -f <镜像名称>:<标签>
- 新镜像的
1 | 第一种方式 |
- 举例
1 | 阿里云仓库的Apache镜像 |
Docker容器
创建容器
1 | 创建容器并进入到容器中 |
参数说明
-i表示以交互模式运行容器(让容器的标准输入保持打开)-d表示后台运行容器,并返回容器ID-t为容器重新分配一个伪输入终端-p指定映射端口--name为容器指定名称--hostname设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts,作为容器主机IP的别名,并且将显示在容器的bash中
示例
1 | 将宿舍机的8080端口映射容器中的80端口 |
查看容器
1 | 查看已启动的容器 |


进入和退出容器
进入容器
1 | docker exec -it <容器名称> /bin/bash |
- 注意事项:只能进入在运行中的容器,否则会报异常

退出容器
- 使用
exit命令退出当前容器,但容器会停止
1 | exit |
启动和停止容器
1 | 启动容器 |
查看容器日志
1 | docker logs -f <容器名称> |

删除容器
1 | docker rm <容器名称> |
- 注意事项:在删除之前需要将容器停止
容器与宿主机之间的复制与挂载
容器与宿主机之间复制
- 从宿主机复制到容器。
docker cp <宿主机路径> <容器名称>/<容器ID>:<容器路径>
1 | docker cp /data/demo/test.txt centos-demo:/home/ |
- 从容器中复制到宿主机。
docker cp <容器名称>/<容器ID>:<容器路径> <宿主机路径>
1 | docker cp centos-demo:/home/hello.txt /root/ |
容器与宿主机之间的挂载
- 宿主机文件夹挂载到容器中(已创建的容器无法再挂载)。就是让容器内部目录和宿主主机目录关联起来,这样的好处是:
- 能够通过宿主机直接操作容器内部目录;
- 可以将容器中重要数据放在挂载目录上,这样就算容器宕掉或者出现什么问题,重要数据不会丢失。
1 | docker run -itd -v <宿主机目录>:<容器目录> <镜像ID> /bin/bash |
- 注意点
- 如果挂载的宿主机目录不存在,Docker 会自动创建这些目录。如果容器内的目录不存在,Docker 会自动创建这些目录
- 没有挂在出来的任何内容都视为可删除缓存,所以必要持久化的数据都要创建数据卷
- 如果要挂载更多的目录,只需在命令中添加更多的 -v 参数即可
1 | docker run -d -v /path/on/host1:/path/in/container1 -v /path/on/host2:/path/in/container2 -v /path/on/host3:/path/in/container3 your_image_name |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 BugMakerHub!
评论







