docker初步学习
docker命令(镜像管理) 镜像属于是不可变基础设施(很少变基本不变)
从库中拉镜像: docker pull 镜像名 查看本地docker镜像 docker images 删除镜像: docker rmi 镜像名 (要求没人使用) 打包(把拉出的镜像打包到一个文件) docker save 镜像名 >文件名 dockeer save 镜像名 |gizp > 文件名 一条命令直接把镜像压缩 拓展,如果要把集群内所有镜像打包放到另一个集群 docker images |awl 'NR>1{print $1}' |> 文件名 scp 文件名 root@目标集群ip 转移至目标主机执行 docker load > 文件名 导入文件: docker load -i 文件名 docker load > 文件名 更改镜像名字: docker tar 原镜像名 目标镜像名 删掉没有名称或者不再使用的镜像: docker prune 拓展,如果要把集群内所有镜像打包放到另一个集群 docker images |awl 'NR>1{print $1}' |> 文件名 scp 文件名 root@目标集群ip 转移至目标主机执行 docker load > 文件名docker命令(容器管理)
启动容器: docker run [选项] [镜像名] [shell命令] [参数] 一般是 docker run --name 名字 镜像名 -d -d是让程序后台运行 查看容器(镜像)信息可以看ip: docker inspect 进程名 退出容器但是不停止运行: ctrl+p+q 删除容器 docker rm 容器名/id 删除所有容器: docker rm -f 'docker ps -qa' qa表示的是显示集群里所有容器的id 容器的暂停: docker pause 容器名 容器暂停时仍然占用宿主机的磁盘空间 是暂停的容器恢复运行: docker unpause 容器名 容器的停止: docker stop 容器名 容器停止后不在占用程序不在占用宿主机的磁盘空间 进入容器进行操作: docker exec -it 容器名 bash docker exec -it 容器名 sh -it 是为了进入容器后有终端窗口进行交互 暴露端口给宿主机: docker run -d --name 名字 -P 镜像名 -P就是给宿主机容器的端口然宿主机也能查到 指定端口: docker run -d --name 名字 -p 宿主机端口:容器端口 镜像名 可以跟宿主机开机自启动: docker run -d --restart awalys --name 名字 镜像名 宿主机文件和容器文件相互复制: docker cp 文件 文件 哪个文件在前就是把哪个文件复制到另一个地方去 清理不再使用的容器: docker system prune
| 命令 | 作用 | 能否开启新终端 | 退出后是否会停止容器 |
|---|---|---|---|
| docker exec | 在运行的容器里开启一个新进程 | 可以 | 不会 |
| docker attach | 连接到容器当前的主进程 | 不能 | 有可能会造成容器停止 |
docker名称空间(隔离)
user 每个容器有自己的用户 mount 每个容器都有自己的根目录 pid 进程 ipc 进程间通讯 network 网络 uts 主机名隔离
docker排错
docker ps 确认容器运行状态,端口映射和启动时间 docker inspect 看看容器内主进程的标准输出和错误日志 docker logs 看看容器的详细配置
镜像制作
第一种方式:
基于现有的容器 进入容器后修改配置修改成自己想要的模样 退出容器 执行命令: docker commit 容器名 镜像名
缺点:手工制作效率低,不能自动化
第二种方式:
dockerfile:
dockerfile指令:
FROM 指定基础镜像 RUN 执行命令 COPY 复制文件 ADD 加强版复制 WORKDIR 设置工作目录 ENV 设置环境变量 AGR 构建参数 EXPOSE 声明端口 CMD 默认命令 ENTRYPOINT 入口点 VLOUME 挂载卷 USER 切换用户 LABEL 添加元数据 HEALTHCHECK 健康检查
