为什么要用Docker
为了让一台机器虚拟成很多的机器(沙箱)
一台服务器给几百个用户使用
沙箱-> 语言沙箱->PHP
系统沙箱方案
-
虚拟机方案
-
5-10租户
-
-
Docker(容器)方案
-
50-100租户
-
Docker的原理
-
Namespaces 进程树、网络接口、挂载点、进程间通信
-
CGroups CPU、内存、磁盘I/O、网络带宽
-
Unionfs 文件系统、镜像
宿主机
沙箱==容器
ps命令查看进程
Namespaces
网桥模式
etch0
CGroups
Unionfs
隔离 相同 不同
不同->可写层 容器
相同->只读层 镜像
联合文件系统
源自Linux
镜像+容器
流程
-
拉取一个镜像
-
创建一个容器
-
在容器中运行命令
Docker被设计来运行命令,命令结束后退出
Docker的架构
-
Client
-
容器管理
-
镜像管理
-
信息和状态查询
-
-
Server
-
Daemon
-
容器(创建)
-
镜像(本地拉取【优先】+Registry拉取)
-
-
Registry
-
仓库
-
Docker常用命令
容器管理
创建容器
docker run
管理容器
docker ps 列表
docker start/stop
docker rm 删除
docker rename 改名
docker cp 复制
docker container prune 删除停止容器
docker exec 运行命令 (运行完就退出)-> 运行不完就不退出 -> 需要多后台怎么办?(进程管理器)
docker commit 从容器创建新镜像 (不想之前的修改丢失)
docker build (读取dockerfile文件)创建镜像
镜像列表
docker images
镜像删除
docker rmi
docker image prune
镜像保存
docker save/load
镜像管理
镜像传输
docker pull/push
docker tag
信息和状态
日志 docker log
状态 docker stats
版本 docker version
进程 docker top
元数据 docker inspect
变化 docker diff
端口 docker port
宿主机进行端口映射
80->8081
80->8082
数据卷管理
HOST
bind mount 挂载
volume
tmpfs mount
创建 docker volume create
列表 docker volume ls
元信息 docker volume inspect
删除 docker volume rm
docker run -d --name devtest -v myvol2:/app nginx:latest
将容器与宿主机进行挂载
Nginx
webservice服务
端口映射
docker run --rm -p 8080:80(宿主机:容器) nginx
docker run --rm -p 8080:80 -v [HostAddress]:[ContainerAddress]:ro nginx 挂载网页
docker run --rm -p 8080:80 -v [HostAddress]:[ContainerAddress]:ro -d nginx 后台运行
docker tag [id] Repository:TAG
Docker --help
dockfile的编写
FROM webdevops/php-apache:8.0.2 COPY vhost.conf COPY init.sh ADD supervisord-proxy.conf EXPOSE 80 8802
-
构建时
-
运行时
添加文件
COPY/ADD
ADD 支持 URL,支持从压缩文件中添加
优先使用COPY,因为更透明
添加信息
ENV/LABEL/ARG
执行命令
RUN/SHELL -> exec 形式的命令 <instruction> ["xxx","xxx","xxx"]
CMD/ENTRYPOINT
其他命令
FROM/EXPOSE/VOLUME/WORKDIR/USER
ONBUILD/STOPSIGNAL
Docker-compose的使用
管理多容器的工具,安装包自带
单容器vs多容器
-
WebApp
-
Webserver
-
Database
-
Cache
-
-
单一容器
-
Webserver
-
Database
-
Cache
-
-
多容器
-
Webserver
-
-
多容器
-
Database
-
-
多容器
-
Cache
-
互访问题
顺序依赖
基本结构
-
version 语法的版本
-
Services 每一个容器的细节(Service)
-
mariadb
-
app
-
build/image(from registry): './docker/web/'
-
ports:
-
-'8801:80'
-
-
volumes:
-
-'./:/app'
-
-
depends_on:
-
-mariadb
-
-
environment:
-
-DB_HOST=mariadb
-
-DB_PORT=3306
-
-DB_USERNAME=root
-
-DB_DATABASE=prism
-
-DB_PASSWORD=theVeryp@ssw0rd
-
-
-
-
volumes 数据卷
docker-compose 是yml格式文件
其他指令
-
arg
-
cmd
-
dns
-
tmpfs
-
expose
-
extra_hosts
-
secrets
-
entrypoint
-
user
-
working_dir
-
restart
用docker封装应用
-
Laravel 网站
-
Gin 代理
-
Database 数据库mysql
容器规划
-
container
-
Laravel 8801
-
运行在PHP环境下
-
laravel init
-
PHP <-> apache <- vhost -> 80:8801
-
-
Gin 8802
-
-
container
-
Database 3306
-
进程管理工具:supervisor