初识 Docker
Docker 概念
- Docker 是一个开源的应用容器引擎
- 诞生于 2013 年初,基于 Go 语言实现,dotCloud 公司出品(后改名为 Docker Inc)
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
- 容器是完全使用沙箱机制,相互隔离
- 容器性能开销极低。
- Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版)和 EE(Enterprise Edition: 企业版)
小结:docker 是一种容器技术,解决软件跨环境迁移的问题
配置镜像
阿里云镜像
Docker 服务相关命令
- 启动docker服务:
systemctl start docker
- 停止docker服务:
systemctl stop docker
- 重启docker服务:
systemctl restart docker
- 查看docker服务状态:
systemctl status docker
- 设置开机启动docker服务:
systemctl enable docker
镜像相关命令
- 查看镜像:查看本地所有的镜像
docker images
docker images -q
# 查看所用镜像的id
- 搜索镜像:从网络中查找需要的镜像
docker search 镜像名称
- 拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。
docker pull 镜像名称
- 删除镜像:删除本地镜像
docker rmi 镜像id
# 删除指定本地镜像docker rmi $(docker images -q)
# 删除所有本地镜像
容器相关命令
查看容器
docker ps # 查看正在运行的容器`
`docker ps -a # 查看所有容器
创建并启动容器
docker run 参数
参数说明:
-i
:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。-t
:为容器重新分配一个伪输入终端,通常与 -i 同时使用。-d
:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec进入容器。退出后,容器不会关闭。-it
创建的容器一般称为交互式容器,-id
创建的容器一般称为守护式容器--name
:为创建的容器命名。
进入容器
docker exec 参数 # 退出容器,容器不会关闭
停止容器
docker stop 容器名称
启动容器
docker start 容器名称
删除容器:如果容器是运行状态则删除失败,需要停止容器才能删除
docker rm 容器名称
查看容器信息
docker inspect 容器名称
容器数据卷
思考问题
- Docker容器删除后,容器中产生的数据也会随之销毁。
- 探讨Docker容器和外部机器能否直接交换文件,以及容器之间如何进行数据交互。
数据卷定义
- 数据卷是宿主机中的一个目录或文件。
- 容器目录和数据卷目录绑定后,对方修改会立即同步。
- 一个数据卷可被多个容器同时挂载,一个容器也可挂载多个数据卷。
数据卷作用
- 实现容器数据持久化。
- 促进外部机器和容器间接通信。
- 支持容器之间的数据交换。
应用部署
部署MySQL
搜索mysql镜像docker search mysql
拉取mysql镜像docker pull mysql:5.6
创建容器,设置端口映射、目录映射
sql
#在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
bash
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
参数说明
-p 3307:3306
:将容器的3306端口映射到宿主机的3307端口。-v $PWD/conf:/etc/mysql/conf.d
:将主机当前目录下的conf/my.cnf
挂载到容器的/etc/mysql/my.cnf
,作为配置目录。-v $PWD/logs:/logs
:将主机当前目录下的logs
目录挂载到容器的/logs
,作为日志目录。-v $PWD/data:/var/lib/mysql
:将主机当前目录下的data
目录挂载到容器的/var/lib/mysql
,作为数据目录。-e MYSQL_ROOT_PASSWORD=123456
:初始化root用户的密码为123456。
然后就可以进入容器或者外部连接
Dockerfile
docker镜像原理

- Docker 镜像本质是什么?
- 是一个分层文件系统
- Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?
- Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
- Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
- 由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小500多MB