结构包括:
不同操作系统的内核可能一样,但是提供的函数库不一样,比如一个Ubuntu的mysql安装到centos,在想调用Ubuntu的函数会发现找不到,而Docker是直接连同Ubuntu的函数库一起打包的,借助内核运行。
docker rmi name:tag 删除某个镜像remove images
docker save -o name.tar name:tag 打包某个镜像
docker 命令 –help 查看某个命令的用法
docker load 加载镜像
docker exec 进入容器
docker logs 查看容器运行日志
docker run –name containerName -p 80:80 -d nginx [command一些容器的命令]
-p 主机端口:容器端口
-d 后台运行
docker exec -it containerName bash bash模式进入容器,docker exec -it redis redis-cli
看到的文件类似一个操作系统,实际上这些文件只需要符合nginx需要的,可以看dockerhub作者写的关于该镜像文件的位置存放,进入的是容器,一个类似的linux操作系统,只不过这个linux操作系统是专门服务于这个容器的,所以支持一些命令
docker ps -a 查看所有容器
docker rm -f containerName 强制删除容器
数据卷可以进行容器的数据共享,可以挂载
数据卷是一个虚拟目录,指向本地文件夹/var/lib/docker/volumes/***
,可以和容器实现数据互通
数据卷的作用:
数据卷操作:
docker run --name nginx -p 80:80 -v html:/usr/share/nginx/html -d nginx:latest -v 数据卷:本机目录
可以在没创建数据卷时执行run,一样会创建数据卷,有则挂载,需要注意数据卷的挂载点
使用docker volume inspect 数据卷的命令查看,不知道有哪些数据卷可以使用docker volume ls
按照文档的说法,mysql镜像的配置文件会引入这两个目录
所以配置文件挂载到主机只需要挂载这两个目录
挂载数据,按照文档的说法,镜像的数据在这个目录/var/lib/mysql
docker run \
--name some-mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-v /temp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /temp/mysql/data:/var/lib/mysql \
-d mysql:5.7.25
容器的文件夹或文件挂载到了本机目录,可以通过docker inspect container查看挂载的信息
常用的镜像我们可以在dockerhub上找到,但是类似自己的项目需要构造镜像的,就需要用到dockerfile了
镜像构建的说明书,包含一个个的命令,每个命令都会形成一层layer
第一行必须是From,从一个基础镜像开始构建
基础镜像可以是操作系统,类似Ubuntu。也可以是别人制作好的基础镜像:java:8-alpine
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:
version: "3.8"
services:
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "/tmp/mysql/data:/var/lib/mysql"
- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
web:
build: .
ports:
- "8090:8090"
上面的Compose文件就描述一个项目,其中包含两个容器:
mysql:5.7.25
镜像构建的容器,并且挂载了两个目录docker build
临时构建的镜像容器,映射端口时8090DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/
其实DockerCompose文件可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。