docker学习
docker 本身就跟mysql服务器一样,通过接收来自shell的命令来执行一些动作
1 | docker run -d \ |
docker run <repositor>:<tag>命令详解
docker run启动并运行一个容器-d表示以分离模式(detached mode)运行容器。使用该参数后,容器将在后台运行--name给容器起个名字,必须唯一-p <host-port>:<docker-port>端口映射,左边是宿主机的端口可更改,右边是容器的端口不可更改,因为已做出来的镜像固定了这个端口-e <KEY>=<VALUE>设置容器的环境变量最后就是指定一个镜像。镜像名称由两部分组成:[
repository]:[tag],其中repository是镜像名,tag是镜像的版本,默认是latest表示镜像的最新版本
docker对容器操作的命令
1 | docker ps # 显示正在运行的容器 |
docker对镜像操作的命令
1 | docker images # 显示本地的镜像 |
volume数据卷,是docker的一种逻辑概念,它能够与宿主机的某个目录进行关联,然后在创建容器时将容器内某个目录与这个数据卷也进行关联,docker就能通过这个数据卷完成宿主机目录与容器内目录的同步。注意,容器只有在创建时才能进行数据卷挂载,创建后就不行了,在创建容器时如果指定的数据卷不存在会创建一个指定名字的数据卷,并且关联的宿主机目录在/var/lib/docker/volumes/<volume_name>/_data目录下
在docker run命令下添加-v参数可以将容器内指定目录与数据卷关联(挂载),比如
1 | docker run --name nginx -v html:/usr/share/nginx/html nginx |
就会创建一个html数据卷,并将创建的nginx容器内的/usr/share/nginx/html与html数据卷相关联,并且这个数据卷与宿主机的/var/lib/docker/volumes/html/_data目录相关联
docker挂载的方式有两种一种是通过数据卷挂载,叫volume;一种是直接与宿主机目录挂载,叫bind
docker对数据卷操作的命令
1 | 都是以volume打头 |
此外还可以不通过数据卷,直接将宿主机目录与容器内目录相关联
在执行docker run命令时,使用-v 本地目录:容器内目录可以完成本地目录挂载
本地目录必须以/或./开头,如果直接以名称开头,会被识别为数据卷而非本地目录
1 | docker run --name nginx -v /home/kali/html:/usr/share/nginx/html nginx |
此外还可以添加ro和rw来控制容器的读写权限,毕竟限制宿主机的读写权限也没什么意义
1 | docker run --name nginx -v html:/usr/share/nginx/html:ro nginx # 容器对数据卷只有读权限 |
docker可以进行网络操作,创建一个网络,其实就是创建一个内部的网络号和子网掩码,然后分配容器主机号,组成容器的内部ip地址。创建一个自定义网络,容器在自定义网络之间就可以通过容器名互相访问。
docker对网络操作的命令
1 | 都是以network打头 |
Dockerfile语法
| 指令 | 说明 | 示例 |
|---|---|---|
FROM |
指定基础镜像 | FROM centos:6 |
ENV |
设置环境变量,可在后面指令使用 | ENV key value |
COPY |
拷贝本地文件到镜像的指定目录 | COPY ./jre11.tar.gz /tmp |
RUN |
执行Linux的shell命令,一般是安装过程命令 |
RUN tar -zxvf /tmp/jre11.tar.gz && EXPORT path=/tmp/jre11:$path |
EXPOSE |
指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT |
镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
1 | docker build -t <image_name>:<tag> <Dockerfile_path> |
Dockerfile让docker知道一个镜像需要哪些基础镜像进行制作
docker-compose.yml让Docker Compose知道一个项目需要怎么构建一些容器来构成子项目

