Docker学习笔记分享

Docker 学 习 笔 记 分 享

学习 Docker 对写 PHP 很有必要,主要有以下几点原因:
首先,保证开发环境一致。不同开发者的系统和配置不同易导致环境差异问题,而 Docker 可通过 Dockerfile 明确指定 PHP 版本、扩展及依赖项,确保开发环境一致,提高开发效率。
其次,简化部署。开发环境构建好的 Docker 镜像可直接在生产服务器运行,避免手动安装配置的繁琐,降低部署风险。
最后,提供资源隔离。Docker 容器为 PHP 应用提供独立的文件系统、网络和进程空间,一个应用问题不影响其他应用和系统服务,提高稳定性和安全性,还便于快速扩展和迁移。

Docker启动类指令

启动:systemctl start docker
停止:systemctl stop docker
重启:systemctl restart docker
查看状态:systemctl status docker
开机启动:systemctl enable docker
查看概要信息:docker info
查看总体帮助文档:docker --help
查看指令帮助文档:docker 具体指令 --help

Docker 镜像类指令

docker images 列出本地主机上的镜像
docker images -a 列出本地所以的镜像(含历史)
docker images -q 只显示镜像id
docker search [OPTIONS] 搜索镜像(OPTIONS镜像名字)
docker search --limit:10 [OPTIONS] 搜索镜像列出10个
docker pull [OPTIONS]:[TAG] 下载镜像(OPTIONS镜像名字、TAG版本号,不填默认最新版本)
docker system df 查看数据占用空间
docker rmi -f [镜像ID] 删除单个镜像
docker rmi -f [镜像TAG] [镜像TAG] 删除多个镜像
docker rmi -f $(docker images -qa) 删除全部镜像

Docker 容器类指令

新建+启动容器

docker run [镜像images]
    -it 启动镜像的终端
        exit 退出终端
    --name=[容器改名名称]

例子:

新建容器并进入容器终端
docker run -it ba6acccedd29 
新建进入容器+终端+容器名为myubuntu
docker run -it --name=myubuntu ba6acccedd29

列出当前所有正在运行的容器

docker 
    ps 列出正在运行的容器
    -a 列出正在运行的容器+历史运行过的
    -l 列出最近创建的容器
    -n [数量] 列出最近n个创建的容器
    -q 列出容器编号
    -p [主机端口]:[容器内部端口] 端口映射
    -v [主机文件夹路径]:[容器文件夹路径] 同步文件夹内容
    --net [网段] 
    --privileged=true root权限,一般配合-v使用

退出容器(在容器终端中)

exit 退出容器终端,容器会停止
ctrl+p+q(按键) 退出容器终端,容器不会停
ctrl p ctrl q 

操作容器

docker start [容器ID或者容器名] 启动已停止运行的容器
docker restart [容器ID或者容器名] 重启容器
docker stop [容器ID或者容器名] 停止容器
dokcer kill [容器ID或者容器名] 强制停止容器
docker rm [容器ID或者容器名] 删除已停止的容器
    -f 强制删除容器(包括正在运行的容器)
    $(docker ps -a -q) 强制删除所有容器(包括正在运行的容器-谨慎使用)

重要

启动守护式容器(后台服务器)

希望docker的服务是后台运行的

docker run -d [容器名] 有些并不可行(一般-it较好)

查看容器后台日志

docker logs [容器id]

查看容器内部进程

docker top [容器id]

查看容器内部细节

docker inspect [容器id]

进入容器并命令行交互

进入或重新进入容器

exec在容器中打开新的终端,并且启动新进程,exit退出不会导致容器停止–==推荐使用==
attach直接进入容器启动命令终端,不会启动新的进程,exit会导致容器停止

docker exec -it [容器id] /bin/bash 进入
docker attach [容器id] 重新进入

从容器内拷贝文件到主机上

docker cp [容器id]:[容器内路径] [主机目录]

导出容器为镜像

docker export [容器id] > [文件名].tar

导入镜像

cat [文件名].tar | docker import - [镜像用户]/[镜像名]:[镜像版本号]

提交容器副本为新的镜像

docker commit -m="你的描述信息" -a="作者" [容器id] [镜像用户]/[镜像名]:[镜像版本号]

创建个人私有镜像库

下载镜像

docker pull registry

运行私有库Registry

相当于本地的dockers hub

docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry

验证私服库有什么镜像

curl -XGET http://[您的ip地址(0.0.0.0)]:5000/v2/_catalog

将新的镜像 [镜像名]:[版本号] 修改符合规范的Tag

docker tag  [镜像名称]:[镜像版本号]  [ip地址]:5000/[镜像名称]:[镜像版本号]

修改配置文件使之支持http

docker默认不允许http推送镜像
修改配置文件 /etc/docker/daemon.json
如果不生效,重启docker服务

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://aa25jngu.mirror.aliyuncs.com"],
  "insecure-registries": ["您的ip:5000"]
}

推送到私服库

docker push [镜像名]:[版本号]

从私服库下载

docker pull [ip地址]:5000/[镜像名]:[版本号]

开启容器卷

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个–privileged=true参数即可

允许一容器实例

docker run -it --privileged=true -v /[主机绝对目录]:/[容器目录] [镜像名]
    :rw 读写权限(默认)
    :ro 只读权限
docker run -it --privileged=true -v /[主机绝对目录]:/[容器目录]:ro [镜像名]

查询虚悬镜像

docker image ls -f dangling=true

删除虚悬镜像

docker image prune

network常用指令

docker network ls 查看newtwork列表
               connect     将容器连接到 network
               create [name]     创建 network
               disconnect  断开容器与 network 连接
               inspect [name]     显示一个或多个的详细信息
               prune       删除所有未使用的network
               rm [name]   删除 network

容器network

    --network bridge ,默认使用docker0
    --network host  指定
    --network none  指定
    --netwokr container:[name/容器id]
本作品采用《CC 协议》,转载必须注明作者和本文链接
放弃总是很容易,但坚持是痛苦的!
讨论数量: 1

老哥也可以看下我们产品,servbay,图形化界面一键部署多版本PHP

4天前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!