docker 镜像是一个只读的模板
镜像可以用来创建 docker 实例
一个镜像可以创建多个容器
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
docker version
sudo docker run hello-world
注:
Docker守护程序绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字由用户拥有root,其他用户只能使用来访问它sudo。Docker守护程序始终以root用户身份运行
如果你不想在前言docker与命令sudo,创建一个名为UNIX组docker和用户添加到它。Docker守护程序启动时,它会创建一个可由该docker组成员访问的Unix套接字
可以在虚拟主机上安装docker的工具,并可以使用 docker-machine 命令来管理主机
类似vagrant
docker-machine ls
docker-machine create --driver virtualbox name
//--driver:指定用来创建机器的驱动类型,这里是 virtualbox
//在本地虚机安装,会去下载boot2docker.iso文件(已安装了docker的系统镜像文件),然后安装创建
docker-machine ip name
docker-machine stop name
docker-machine start name
docker-machine ssh name
非官方支持的第三方驱动
https://github.com/docker/docker.github.io/blob/master/machine/AVAILABLE_DRIVER_PLUGINS.md
阿里云驱动使用
https://github.com/AliyunContainerService/docker-machine-driver-aliyunecs
参考
阿里云docker ce安装手册
https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.1ed51991BdQ9Ml
docker version
docker info
docker --help
镜像命令
docker images
docker search
docker pull
docker rmi
docker tag : 标记本地镜像,将其归入某一仓库。并不是修改":"后面的标签
备份和恢复镜像
列出当前所有正在运行的容器
退出容器
删除已停止的容器
停止后自动删除
dokcer run -it --rm 容器ID /bin/bash
启动守护式容器
进入正在运行的容器并以命令行交互
exec是在外面让容器执行命令
从容器内拷贝文件到主机上
提交容器成镜像
总结:
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container # 创建一个新的容器,同 run,但不启动容器
diff Inspect changes on a container's filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container # 创建一个新的容器并运行一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件
特点:
Docker镜像都是只读的
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
UnionFS(联合文件系统)
docker镜像加载原理
为什么 Docker 镜像要采用这种分层结构
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
直接命令添加
dockerfile添加
docerfile里面volume的作用
容器内的卷目录对应的主机目录地址哪?
备注:
docker挂载主机目录,docker访问出现cannot open directory : Permission denied
解决办法:在挂载目录的命令后多加一个 --privileged=true 参数即可
数据卷容器
命名的容器挂载数据卷,其它容器通过挂载这个容器(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
容器间传递共享(–volumes-from)
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
dockerfile 基础知识
Docker执行Dockerfile的大致流程
dockerfile 指令
https://www.cnblogs.com/sparkdev/p/9573248.html
Dockerfile 中的 COPY 与 ADD 命令区别详解
· bridge模式,使用--net=bridge指定,默认设置
· host模式,使用--net=host指定
· container模式,使用--net=container:NAME_or_ID指定
· none模式,使用--net=none指定
都是在 docker run 后面的,指定容器的网络模式
//创建自定义网络
docker network create --driver=bridge --subnet=192.138.0.0/16 mynginx
docker network create --driver bridge --subnet 192.138.0.0/16 mynginx
//扩展 swarm的
docker network create -d overlay --attachable sharenet
//使用自定义网络
docker run -d --rm --name myfpm --network mynginx --ip 192.138.0.2 php:7.2-fpm-alpine3.11
docker run -d --rm --name myfpm --net=mynginx --ip 192.138.0.2 php:7.2-fpm-alpine3.11