Docker笔记

开源的应用容器引擎

打包环境和应用到一个轻量级,可移植的容器中,发布到任何 Linux 机器上,规避了软件跨环境迁移的问题

沙箱机制,相互隔离

1.1 安装 sudo apt install docker-ce 1.2 架构

守护进程(daemon):后台服务,管理一个 Docker 进程

镜像(image):相当于一个 root 文件系统,打包了环境和应用

容器(container):镜像运行时的实体,可以被创建,启动,暂停, 停止,删除

仓库(repository):保存镜像文件

2. Docker命令 2.1 服务(守护进程)相关

启动

sudo systemctl start docker

查看

sudo systemctl status docker

停止

sudo systemctl stop docker

重启

sudo systemctl restart docker 2.2 镜像相关

查看

sudo docker images

搜索

# 查看具体版本号需要去 hub.docker.com sudo docker search ubuntu

拉取

# 配置阿里云加速:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors sudo vim /etc/docker/daemon.json { "registry-mirrors": ["加速地址"] } sudo systemctl daemon-reload sudo systemctl restart docker # 拉取镜像 sudo docker pull ubuntu[:版本]

删除

sudo docker rmi ubuntu[:版本] 2.3 容器相关

查看

# 要查看所有包括已停止运行的容器:加上参数 -a sudo docker ps

创建

# -i:保持STDIN打开,-t:交互模式,bash:自定义进入容器后执行的命令 # -it 启动的容器称为交互式容器,exit 命令退出后容器会自动停止 sudo docker run -it --name u1 ubuntu[:版本] bash # -d:后台创建容器,不会立即进入 # -id 启动的容器称为守护式容器,exit 退出时容器也不会自动停止 sudo docker run -id --name u1 ubuntu[:版本]

进入

# 只能进入正在运行的容器 sudo docker exec -it u1 bash

启动

# 这种方式启动容器后 exit 退出时也不会自动停止 sudo docker start u1

停止

sudo docker stop u1

删除

# 不能删除正在运行的容器 sudo docker rm u1

查看信息

sudo docker inspect u1 3. Docker数据卷 3.1 简介

宿主机中的一个目录(或文件),与容器内目录(文件)绑定后,同步它们的数据

可以被多个容器同时挂载,一个容器也可以挂载多个数据卷

数据持久化与数据交换

3.2 配置数据卷 # 创建启动容器时,-v 参数设置 # 容器内目录必须是绝对路径,宿主机目录可以相对,但相对的是 /var/lib/docker/volumes/,并不是当前路径 # 目录不存在会自动创建,而文件不存在时会被当成目录创建并挂载 # 可用多个 -v 挂载多个 sudo docker run ... -v 宿主目录(文件):容器内目录(文件) ... --name u1 ubuntu[:版本] 3.3 配置数据卷容器

配置一个专门的容器来挂载数据卷,其他容器挂载这个容器(这时候相当于挂载同一个数据卷)来交换数据

sudo docker run ... -v 宿主目录(文件):容器内目录(文件) ... --name u1 ubuntu[:版本] # 其他容器挂载 u1 sudo docker run ... --volumes-from u1 --name u2 ubuntu[:版本] sudo docker run ... --volumes-from u1 --name u3 ubuntu[:版本] 4. Docker应用部署 4.1 搜索并拉取镜像 sudo docker search mysql sudo docker pull mysql:5.7 4.2 MySQL部署 # 宿主机创建MySQL目录用来存储数据信息 mkdir mysql cd mysql # 端口映射 宿主机:容器 sudo docker run -id \ -p 3306:3306 \ -v $PWD/conf.d:/etc/mysql.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=111 \ --name m1 mysql:5.7 4.3 Nginx部署 mkdir nginx cd nginx # 如果需要默认配置,可先启动一个容器将默认配置复制一份,否则宿主机空文件挂载后会覆盖容器内文件 # sudo docker cp n1:/etc/nginx/nginx.conf nginx.conf sudo docker run -id \ -p 80:80 \ -v $PWD/nginx.conf:/etc/nginx/nginx.conf \ -v $PWD/conf.d:/etc/nginx/conf.d \ -v $PWD/logs:/var/log/nginx \ --name n1 nginx 5. Docker镜像制作 5.1 Docker镜像原理

Docker镜像是由特殊的 文件系统 叠加 而成

最底端使用宿主机的bootfs

第二层是 rootfs,被称为基础镜像

最顶层为对外镜像名,下层镜像称为上层镜像的父镜像,下载时会把父镜像一并下载

统一文件系统将不同层整合成了一个文件系统,隐藏了多层的存在

镜像是只读的,从一个镜像启动容器时,会在顶层加载一个读写文件系统作为容器

5.2 方式一:容器转镜像

这种方式并不常用,因为打包后体积巨大不利于传递。

# 原容器中挂载的目录(文件)不会被提交到镜像 sudo docker commit 容器名(id) 镜像名[:版本号] # 镜像打包 sudo docker save -o 文件名 镜像名[:版本号] # 镜像还原 sudo docker load -i 文件名 5.3 方式二:Dockerfile

包含多条指令的文本文件

每条指令构建一层,基于基础镜像

提供完全一致的环境的构建方法

参照 hub.docker.com 上相关镜像的写法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsspwj.html