Docker基础知识
一.镜像与容器
当利用docker安装应用时,docker会自动搜索下载应用镜像(image)。
镜像:包含应用本身,应用运行时所需的环境,配置,系统函数库。
容器:当docker在运行镜像时创建一个隔离环境称为容器。
镜像仓库:存储和管理镜像的平台。链接: docker hub平台
下图为部署mysql的过程:
二.命令解读
docker run -d \ 创建并运行一个容器,-d 让容器在后台运行
--name mysql \ 给容器起名
-p 3306:3306 \ 端口映射,宿主机端口:进程端口 直接ping容器不通,可访问服务器,间接访问该容器
-e TZ=Asia/Shanghai \ 设置环境变量
-e MYSQL_ROOT_PASSWORD=123 \
mysql 运行的镜像的名字mysql:5.7
三.常见命令
docker常见命令:
命令 | 说明 |
---|---|
docker pull | 拉取镜像 |
docker push | 推送镜像到DockerRegistry |
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker run | 创建并运行容器(不能重复创建) |
docker stop | 停止指定容器 |
docker start | 启动指定容器 |
docker restart | 重新启动容器 |
docker rm | 删除指定容器 |
docker ps | 查看容器 |
docker logs | 查看容器运行日志 |
docker exec | 进入容器 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker inspect | 查看容器详细信息 |
四.数据卷(volume)
问题:docker镜像下的资源只配备运行所需的命令,很多vi ll都没有,因此无法修改部署
数据卷是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁
挂载目录:docker run -v 数据卷:容器内目录
注:容器若已经创建,没有办法再挂载,需先删除容器,docker rm -f nginx
实例(利用Nginx容器部署静态资源–将静态资源部署到nginx的html目录上):
- 挂载目录:
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx //数据卷名称任意,容器内目录可以在hub docker中寻找
- 挂载点查看:
docker volume inspect html
此时,宿主机目录已经间接和容器目录产生关系
- cd进入该目录并且使用vi命令修改内容
cd /var/lib/docker/volumes/html/_data
vim index.html
- 进入浏览器输入ip+端口号进行查看(我的ip+端口号192.168.136.129:80)
过程中可能会遇到的问题:
1.启动一个nginx容器报错
docker: Error response from daemon: driver failed programming external connectivity on endpoint webs
解决方法:
systemctl stop firewalld
setenforce 0
systemctl restart docker
2.浏览器中打不开页面
url: (7) Failed to connect to 192.168.136.129 port 80 after 0 ms: Connection refused
解决方法:
该原因是因为nginx没有启动
docker ps
docker start nginx
curl 192.168.136.129:80
五.本地目录挂载
作用:实现宿主机目录与容器的(数据目录,配置文件,初始化脚本等等)挂载 docker run -v 本地目录:容器内目录
注:本地目录要以"/“或者”./"开头,若直接名称开头会被识别为数据卷而非本地目录
六.Dockerfile语法
镜像结构:
不需要自己做镜像,自定义镜像时,描述自己的镜像结构,docker会自动完成整个镜像的构建,如何告诉docker镜像结构?—Dockerfile
Dockerfile是一个文本文件,其中包含一个个指令,用指令来说明要执行什么操作来构建镜像。
指令 | 说明 |
---|---|
FROM | 指定基础镜像 |
ENV | 设置环境变量,可在后面指令使用 |
COPY | 拷贝本地文件到镜像的指定目录 |
RUN | 执行Linux的shell命令,一般是安装过程的命令 |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 |
编写好了Dockerfile,可以利用下面命令构建镜像:
docker build -t myImage:1.0 .
- -t:给镜像起名,格式为repository:tag的格式,不指定tag,默认就是latest
- .:指定dockerfile所在目录,当前目录就是“.”
自定义镜像:
1.准备好一个dockerfile与一个架构包,以及基础镜像
docker load -i jdk.tar //加载镜像
cd demo/
docker build -t docker-demo . //构建镜像
docker run -d --name dd -p 8080:8080 docker-demo //创建并运行一个容器
docker logs -f dd
七.容器网络互联
加入自定义网络的容器可以通过容器名
互相访问
Docker的网络操作命令如下:
命令 | 说明 |
---|---|
docker network create | 创建一个网络 |
docker network ls | 查看所有网络 |
docker network rm | 删除指定网络 |
docker network prune | 清除未使用的网络 |
docker network connect | 使指定容器连接加入某网络 |
docker network disconnect | 使指定容器连接离开某网络 |
docker network inspect | 查看网络详细信息 |
八. DockerCompose–项目一键部署
docker compose [option] [command]
其中,OPTIONS和COMMAND都是可选参数,比较常见的有:
类型 | 参数或指令 | 说明 |
---|---|---|
Options | -f | 指定compose文件的路径和名称 |
-p | 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念 | |
Commands | up | 创建并启动所有service容器 |
down | 停止并移除所有容器、网络 | |
ps | 列出所有启动的容器 | |
logs | 查看指定容器的日志 | |
stop | 停止容器 | |
start | 启动容器 | |
restart | 重启容器 | |
top | 查看运行的进程 | |
exec | 在指定的运行中容器中执行命令 |