Docker系列——介绍、安装、镜像、容器、docker容器与镜像、数据卷、Dockerfile、docker 配置pycharm连接
- 1 Docker 介绍
- 2 Docker安装
- 3 镜像
- 4 容器
- 一 容器简介
- 二 容器与虚拟机
- 三 容器生命周期
- 四 容器生命周期管理
- 4.1 容器创建 – docker create
- 4.2 容器启动 – docker start
- 4.3 容器创建并启动 – docker run
- 4.4 docker run 与 docker create + docker start
- 4.5 容器暂停 – docker pause
- 4.6 容器取消暂停 – docker unpause
- 4.7 容器关闭 – docker stop
- 4.8 容器终止 – docker kill
- 4.9 docker stop和docker kill的区别
- 4.10 容器重启 – docker restart
- 4.11 容器删除 – docker container rm
- 五 容器信息查看
- 5.2 容器日志信息 – docker logs
- 六 容器运行时操作
- 七 总结
- docker容器与镜像
- 数据卷
- Dockerfile
- docker 配置pycharm连接
1 Docker 介绍
1.1 简介
Docker是开发,运行和部署应用程序的开放管理平台。
开发人员能利用docker 开发和运行应用程序运维人员能利用docker 部署和管理应用程序
1.2 Docker平台介绍
Docker提供了在一个完全隔离的环境中打包和运行应用程序的能力,这个隔离的环境被称为容器。
由于容器的隔离性和安全性,因此可以在一个主机(宿主机)上同时运行多个相互隔离的容器,互不干预。
Docker已经提供工具和组件(Docker Client、Docker Daemon等)来管理容器的生命周期:
使用容器来开发应用程序及其支持组件。•容器成为分发和测试你的应用程序的单元。•准备好后,将您的应用程序部署到生产环境中,作为容器或协调服务。无论您的生产环境是本地数据中心,云提供商还是两者的混合,这都是一样的。
1.3 为什么使用Docker
Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。
借助Docker,您可以像管理应用程序一样管理基础架构。
通过利用Docker的方法快速进行运输,测试和部署代码,您可以显着缩短编写代码和在生产环境中运行代码之间的延迟
开发人员在本地编写代码,可以使用Docker同事进行共享,实现协同工作。
使用Docker开发完成程序,可以直接对应用程序执行自动和手动测试。
当开发人员发现错误或BUG时,可以直接在开发环境中修复后,并迅速将它们重新部署到测试环境进行测试和验证。
利用Docker开发完成后,交付时,直接交付Docker,也就意味着交付完成。后续如果有提供修补程序或更新,需要推送到生成环境运行起来,也是一样的简单。
Docker主要解决的问题:
保证程序运行环境的一致性;
降低配置开发环境、生产环境的复杂度和成本;
实现程序的快速部署和分发
2 Docker 整体结构(了解)
2.1 Docker引擎介绍 (Docker Engine)
Docker Engine是一个包含以下组件的客户端-服务端(C/S)应用程序
- 服务端 — 一个长时间运行的守护进程(Docker Daemon)
- REST API — 一套用于与Docker Daemon通信并指示其执行操作的接口
- 客户端 — 命令行接口CLI( Command Line Interface)
- CLI利用Docker命令通过REST API直接操控Docker Daemon执行操作
- Docker Daemon负责创建并管理Docker的对象(镜像、容器、网络、数据卷)
2.2 Docker结构概览介绍
Docker客户端(Docker Client)
Docker客户端(Docker Client)是用户与Docker进行交互的最主要方式。当在终端输入docker命令时,对应的就会在服务端产生对应的作用,并把结果返回给客户端。Docker Client除了连接本地服务端,通过更改或指定DOCKER_HOST连接远程服务端。
Docker服务端(Docker Server)
Docker Daemon其实就是Docker 的服务端。它负责监听Docker API请求(如Docker Client)并管理Docker对象(Docker Objects),如镜像、容器、网络、数据卷等
Docker Registries
俗称Docker仓库,专门用于存储镜像的云服务环境.
Docker Hub就是一个公有的存放镜像的地方,类似Github存储代码文件。同样的也可以类似Github那样搭建私有的仓库。
Docker 对象(Docker Objects)
镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。
容器:镜像被运行起来后的实例。
网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。
数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。
3 Docker 底层技术(了解)
Docker使用Go语言实现。
Docker利用linux内核的几个特性来实现功能:
利用linux的命名空间(Namespaces)
利用linux控制组(Control Groups)
利用linux的联合文件系统(Union File Systems)
这也就意味着Docker只能在linux上运行。
在windows、MacOS上运行Docker,其实本质上是借助了虚拟化技术,然后在linux虚拟机上运行的Docker程序。容器格式( Container Format ):
Docker Engine将namespace、cgroups、UnionFS进行组合后的一个package,就是一个容器格式(Container Format)。Docker通过对这个package中的namespace、cgroups、UnionFS进行管理控制实现容器的创建和生命周期管理。
容器格式(Container Format)有多种,其中Docker目前使用的容器格式被称为libcontainer
Namespaces(命名空间):为Docker容器提供操作系统层面的隔离
进程号隔离:每一个容器内运行的第一个进程,进程号总是从1开始起算
网络隔离:容器的网络与宿主机或其他容器的网络是隔离的、分开的,也就是相当于两个网络
进程间通隔离:容器中的进程与宿主机或其他容器中的进程是互相不可见的,通信需要借助网络
文件系统挂载隔离: 容器拥有自己单独的工作目录
内核以及系统版本号隔离:容器查看内核版本号或者系统版本号时,查看的是容器的,而非宿主机的
Control Groups(控制组-cgroups):为Docker容器提供硬件层面的隔离
控制组能控制应用程序所使用的硬件资源。
基于该性质,控制组帮助docker引擎将硬件资源共享给容器使用,并且加以约束和限制。如控制容器所使用的内存大小。
Union File Systems(联合文件系统–UnionFS):利用分层(layer)思想管理镜像和容器
控制组帮助docker引擎将硬件资源共享给容器使用,并且加以约束和限制。如控制容器所使用的内存大小。
- Union File Systems(联合文件系统–UnionFS):利用分层(layer)思想管理镜像和容器
2 Docker安装
一 Docker-CE 和 Docker-EE介绍版本介绍
- Docker-CE指Docker社区版,由社区维护和提供技术支持,为免费版本,适合个人开发人员和小团队使用。
- Docker-EE指Docker企业版,为收费版本,由售后团队和技术团队提供技术支持,专为企业开发和IT团队而设计。
- 相比Docker-EE,增加一些额外功能,更重要的是提供了更安全的保障。
- 此外,Docker的发布版本分为Stable(稳定)版和Edge(测试)版,区别在于前者是按季度发布的稳定版(发布慢),后者是按月发布的边缘版(发布快)。
- 通常情况下,Docker-CE足以满足我们的需求。主要针对Docker-CE进行学习。
1.1 版本情况
注意:自从区分docker-ce和docker-ee之后,docker最初始的版本是17.03,也就是17年发布的,所有17是老版本和新版本的分水岭
1.2 系统支持情况
二 Centos 上安装 Docker-CE
- 系统要求:CentOS7
- 查看官方源安装教程
# 0 卸载老版本(新机器不用操作)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# yum list installed | grep docker
# yum remove docker-ce.x86_64 docker-ce-cli.x86_64
# rm -rf /var/lib/docker
# sudo yum update
# 1 安装必要的系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 2 添加源信息
-官方:地址在国外,很慢
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-阿里云:(推荐)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3 检查一下/etc/yum.repos.d/docker-ce.repo 中的url地址是不是都是阿里云
cat /etc/yum.repos.d/docker-ce.repo
# 4 安装
sudo yum -y install docker-ce
# 5 开启docker服务
systemctl start docker
# 6 docker info 查看docker信息
- 安装成功后,使用 docker version 命令查看
三 Ubuntu 上安装 Docker-CE
- 系统要求:Ubuntu 14.04及其以上版本
- 查看官方源安装教程
# 0 卸载
sudo apt-get remove docker docker-engine docker.io containerd runc
# 1 安装必要工具
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 2 安装GPG证书
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#换成阿里云
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 2 写入软件源信息
#官方
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#换成阿里云
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 3 更新并安装docker-ce
sudo apt-get -y install docker-ce
# 4 开启docker服务
systemctl status docker
- 安装成功后,使用 docker version查看
如果出现权限禁止,需要切换到root用户执行
su
输入密码
docker version
四 Windows /MacOS 上安装 Docker-CE
- 系统要求:
- 安装软件下载地址
五 加速配置
- 为什么使用加速器:
配置Docker加速器,将会提升在国内获取Docker官方镜像的速度,否则后面下载镜像(docker pull)的过程会很慢,甚至有可能无法下载镜像
- 配置阿里云/清华源加速器(docker 17以上版本)
# 方式1(仅对当次有效)
docker run centos:7 --registry-mirror=https://docker.mirrors.ustc.edu.cn
#修改 /etc/default/docker,加入 DOCKER_OPTS=”镜像地址”,可以有多个
DOCKER_OPTS="--registry-mirror=https://docker.mirrors.ustc.edu.cn"
# 方式2(json 配置文件的方式)(严格的json格式,不符合格式会报错)
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
'''
几个速度比较快的镜像地址
Docker 官方中国区: https://registry.docker-cn.com
网易: http://hub-mirror.c.163.com
中科大: https://docker.mirrors.ustc.edu.cn
'''
# 方式3(阿里云方式,同方式2,只是阿里云分配的私有地址,自己用自己的)
参考教程:https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.545.OY7haW
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://x1566319.mirror.aliyuncs.com"]
}
3 镜像
一 镜像简介
镜像是一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。
通过镜像可以创建一个或多个容器。
二 镜像管理
2.1 镜像搜索-docker search
# 作用:
搜索Docker Hub(镜像仓库)上的镜像
# 命令格式:
docker search [OPTIONS] TERM
# 命令参数(OPTIONS):
-f, --filter filter 根据提供的格式筛选结果
--format string 利用Go语言的format格式化输出结果
--limit int 展示最大的结果数,默认25个
--no-trunc 内容全部显示
# 命令演示
docker search -f is-offical=true ubuntu
docker search ubuntu
2.2 镜像查看 - docker images/docker image ls
# 作用:
列出本地镜像
# 命令格式:
docker images [OPTIONS] [REPOSITORY[:TAG]]
或者 docker image ls [OPTIONS] [REPOSITORY[:TAG]]
# 命令参数(OPTIONS):
-a, --all 展示所有镜像 (默认隐藏底层的镜像)
--no-trunc 不缩略显示
-q, --quiet 只显示镜像ID
# 命令演示:
docker images
docker images centos:latest
2.3 镜像下载 - docker pull
# 作用:
下载远程仓库(如Docker Hub)中的镜像
# 命令格式:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 命令参数(OPTIONS):
-a, --all-tags 下载所有符合给定tag的镜像
# 命令演示:
docker pull ubuntu
docker pull centos
2.4 镜像删除 - docker rmi/docker image rm
# 作用:
将本地的一个或多个镜像删除
# 命令格式:
docker rmi [OPTIONS] IMAGE [IMAGE...]
或者 docker image rm [OPTIONS] IMAGE [IMAGE...]
# 命令参数(OPTIONS):
-f, --force 强制删除
# 命令演示:
docker rmi e934 452a
2.5 镜像保存备份 – docker save
# 作用:
将本地的一个或多个镜像打包保存成本地tar文件(输出到STDOUT)
# 命令格式:
docker save [OPTIONS] IMAGE [IMAGE...]
# 命令参数(OPTIONS):
-o, --output string 指定写入的文件名和路径
# 命令演示:
docker save -o linux_images.tar centos ubuntu
2.6 镜像备份导入 - docker load
# 作用:
将save命令打包的镜像导入本地镜像库中
# 命令格式:
docker load [OPTIONS]
# 命令参数(OPTIONS):
-i, --input string 指定要打入的文件,如没有指定,默认是STDIN
-q, --quiet 不打印导入过程信息
# 命令演示
docker load -i linux_images.tar
docker load -i linux_images.tar -q
2.7 镜像重命名 – docker tag
# 作用:
对本地镜像的NAME、TAG进行重命名,并新产生一个命名后镜像
# 命令格式:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
# 命令参数(OPTIONS):
无
# 命令演示
docker tag e934 centos-newname:newtag
2.8 镜像详细信息 – docker image inspect/docker inspect
# 作用:
查看本地一个或多个镜像的详细信息
# 命令格式:
docker image inspect [OPTIONS] IMAGE [IMAGE...]
或者 docker inspect [OPTIONS] IMAGE [IMAGE...]
# 命令参数(OPTIONS):
-f, --format string 利用特定Go语言的format格式输出结果
# 命令演示:
docker image inspect -f "{{json .id}}" centos
docker image inspect -f "{{json .Created}}" centos
docker image inspect
2.9 镜像历史信息 – docker history
# 作用:
查看本地一个镜像的历史(历史分层)信息
# 命令格式:
docker history [OPTIONS] IMAGE
# 命令参数(OPTIONS):
-H, --human 将创建时间、大小进行优化打印(默认为true)
-q, --quiet 只显示镜像ID
--no-trunc 不缩略显示
# 命令演示
docker history ubuntu
docker history ubuntu -H=false
三 总结
4 容器
一 容器简介
容器(Container):容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行
- Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例。
- 容器具备一定的生命周期。
- 另外,可以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样。
二 容器与虚拟机
- 容器和虚拟机一样,都会对物理硬件资源进行共享使用。
- 容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。
- 容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等。也就是说,在容器中的操作,如同在一个虚拟机(操作系统)中操作一样。
- 同虚拟机一样,容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下
注意:容器并不是虚拟机,但它们有很多相似的地方
- 虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合。
- 容器是轻量级的,虚拟机是重量级的。首先容器不需要额外的资源来管理(不需要Hypervisor、Guest OS),虚拟机额外更多的性能消耗;其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么方便了。
- 也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上。
三 容器生命周期
3.1 虚拟机的生命周期
3.2 容器的生命周期
四 容器生命周期管理
4.1 容器创建 – docker create
# 作用:
利用镜像创建出一个Created 状态的待启动容器
# 命令格式:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
# 命令参数(OPTIONS):查看更多
-t, --tty 分配一个伪TTY,也就是分配虚拟终端
-i, --interactive 即使没有连接,也要保持STDIN打开
--name 为容器起名,如果没有指定将会随机产生一个名称
# 命令参数(COMMAND\ARG):
COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
# 命令演示:
docker create --name test-container centos ps -A
docker create -ti --name test-container2 centos /bin/bash
docker ps -a
4.2 容器启动 – docker start
# 作用:
将一个或多个处于创建状态或关闭状态的容器启动起来
# 命令格式:
docker start [OPTIONS] CONTAINER [CONTAINER...]
# 命令参数(OPTIONS):
-a, --attach 将当前shell的 STDOUT/STDERR 连接到容器上
-i, --interactive 将当前shell的 STDIN连接到容器上
# 命令演示:
docker ps -a
docker start -a 65ebc
docker start test-container2
4.3 容器创建并启动 – docker run
# 作用:
利用镜像创建并启动一个容器
# 命令格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 命令参数(OPTIONS):查看更多
-t, --tty 分配一个伪TTY,也就是分配虚拟终端
-i, --interactive 即使没有连接,也要保持STDIN打开
--name 为容器起名,如果没有指定将会随机产生一个名称
-d, --detach 在后台运行容器并打印出容器ID
--rm 当容器退出运行后,自动删除容器
# 命令参数(COMMAND\ARG):
COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
# 命令演示:
docker run centos ps -A
docker run -d centos ps -A
docker run --rm -d centos ps -A
docker run -d centos ps -A
4.4 docker run 与 docker create + docker start
docker run 相当于 docker create + docker start –a 前台模式
docker run -d 相当于 docker create + docker start 后台模式
4.5 容器暂停 – docker pause
# 作用:
暂停一个或多个处于运行状态的容器
# 命令格式:
docker pause CONTAINER [CONTAINER...]
# 命令参数(OPTIONS):
无
# 命令演示
docker ps -a
docker pause test-container2
docker ps -a # 容器是Pause状态
4.6 容器取消暂停 – docker unpause
# 作用:
取消一个或多个处于暂停状态的容器,恢复运行
# 命令格式:
docker unpause CONTAINER [CONTAINER...]
# 命令参数(OPTIONS):
无
# 命令演示:
docker unpause test-container2
docker ps -a # 处于运行状态
4.7 容器关闭 – docker stop
# 作用:
关闭一个或多个处于暂停状态或者运行状态的容器
# 命令格式:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
# 命令参数(OPTIONS):
-t, --time int 关闭前,等待的时间,单位秒(默认 10s)
# 命令演示:
docker stop -t 1 容器id
4.8 容器终止 – docker kill
# 作用:
强制并立即关闭一个或多个处于暂停状态或者运行状态的容器
# 命令格式:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
# 命令参数(OPTIONS):
-s, --signal string 指定发送给容器的关闭信号 (默认“KILL”信号)
# 命令演示:
docker kill test-container2
4.9 docker stop和docker kill的区别
# 一 前提知识点:
1 Linux其中两种终止进程的信号是:SIGTERM和SIGKILL
2 SIGKILL信号:无条件终止进程信号。
进程接收到该信号会立即终止,不进行清理和暂存工作。
该信号不能被忽略、处理和阻塞,它向系统管理员提供了可以杀死任何进程的方法。
3 SIGTERM信号:程序终结信号,可以由kill命令产生。
与SIGKILL不同的是,SIGTERM信号可以被阻塞和终止,以便程序在退出前可以保存工作或清理临时文件等。
# 二 docker stop 会先发出SIGTERM信号给进程,告诉进程即将会被关闭。在-t指定的等待时间过了之后,将会立即发出SIGKILL信号,直接关闭容器。
# 三 docker kill 直接发出SIGKILL信号关闭容器。但也可以通过-s参数修改发出的信号。
# 四 因此会发现在docker stop的等过过程中,如果终止docker stop的执行,容器最终没有被关闭。而docker kill几乎是立刻发生,无法撤销。
# 五 此外还有些异常原因也会导致容器被关闭,比如docker daemon重启、容器内部进程运行发生错误等等“异常原因”。
4.10 容器重启 – docker restart
# 作用:
重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器
该命令相当于stop和start命令的结合
# 命令格式:
docker restart [OPTIONS] CONTAINER [CONTAINER...]
# 命令参数(OPTIONS):
-t, --time int 重启前,等待的时间,单位秒(默认 10s)
实则是关闭前等待的时间
4.11 容器删除 – docker container rm
# 作用:
删除一个或多个容器
# 命令格式:
docker container rm [OPTIONS] CONTAINER [CONTAINER...]
或者 docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 命令参数(OPTIONS):
-f, --force 强行删除容器(会使用 SIGKILL信号)
-v, --volumes 同时删除绑定在容器上的数据卷
# 命令演示
docker rm -f 容器id 容器名
五 容器信息查看
5.1 容器详细信息 – docker container inspect
# 作用:
查看本地一个或多个容器的详细信息
# 命令格式:
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
或者 docker inspect [OPTIONS] CONTAINER [CONTAINER...]
# 命令参数(OPTIONS):
-f, --format string 利用特定Go语言的format格式输出结果
-s, --size 显示总大小
# 命令演示
docker container inspect -f "{{json .State.Status}}" 容器id
docker container inspect 容器id
5.2 容器日志信息 – docker logs
# 作用:
查看容器的日志信息
# 命令格式:
docker logs [OPTIONS] CONTAINER
# 命令参数(OPTIONS):
--details 显示日志的额外信息
-f, --follow 动态跟踪显示日志信息
--since string 只显示某事时间节点之后的
--tail string 显示倒数的行数(默认全部)
-t, --timestamps 显示timestamps时间
--until string 只显示某事时间节点之前的
# 注意:
容器日志中记录的是容器主进程的输出STDOUT\STDERR
5.3 容器重命名 – docker rename
# 作用:
修改容器的名称
# 命令格式:
docker rename CONTAINER NEW_NAME
# 命令参数(OPTIONS):
无
六 容器运行时操作
6.1 容器连接 – docker attach
# 作用:
将当前终端的STDIN、STDOUT、STDERR绑定到正在运行的容器的主进程上实现连接
# 命令格式:
docker attach [OPTIONS] CONTAINER
# 命令参数(OPTIONS):
--no-stdin 不绑定STDIN
6.2 容器中执行新命令 – docker exec
# 作用:
在容器中运行一个命令
# 命令格式:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
# 命令参数(OPTIONS):
-d, --detach 后台运行命令
-i, --interactive 即使没连接容器,也将当前的STDIN绑定上
-t, --tty 分配一个虚拟终端
-w, --workdir string 指定在容器中的工作目录
-e, --env list 设置容器中运行时的环境变量
七 总结
docker容器与镜像
一 Docker的容器与镜像
1.1 容器与镜像的关系
1.2 容器提交 – docker commit
# 作用:
根据容器生成一个新的镜像
# 命令格式:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 命令参数(OPTIONS):
-a, --author string 作者
-c, --change list 为创建的镜像加入Dockerfile命令
-m, --message string 提交信息,类似git commit -m
-p, --pause 提交时暂停容器 (default true)
# 命令演示
docker run --rm -dti centos bash
docker exec -d 容器id号 yum -y install net-tools
docker commit -m 'install net-tools' 容器id号 centos-net-tools:lastest
docker images
docker history centos-net-tools
1.3 容器导出 – docker export
# 作用:
将容器当前的文件系统导出成一个tar文件
# 命令格式:
docker export [OPTIONS] CONTAINER
# 命令参数(OPTIONS):
-o, --output string 指定写入的文件,默认是STDOUT
1.4 容器打包的导入 – docker import
# 作用:
从一个tar文件中导入内容创建一个镜像
# 命令格式:
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
# 命令参数(OPTIONS):
-c, --change list 为创建的镜像加入Dockerfile命令
-m, --message string 导入时,添加提交信息
数据卷
一 Docker 数据卷简介
1.1 为什么用数据卷
- 宿主机无法直接访问容器中的文件
- 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失
- 容器之间也无法直接访问互相的文件
为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现: - 容器与主机之间、容器与容器之间共享文件
- 容器中数据的持久化
- 将容器中的数据备份、迁移、恢复等
1.2 数据卷的特点
- 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
- 数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。
- 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
- 容器对数据卷的修改是实时进行的。
- 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响。
二 Docker 数据卷管理
2.1 Docker挂载容器数据卷的三种方式
- bind mounts:将宿主机上的一个文件或目录被挂载到容器上。
- volumes:由Docker创建和管理。使用docker volume命令管理
- tmpfs mounts:tmpfs 是一种基于内存的临时文件系统。tmpfs mounts 数据不会存储在磁盘上。
2.2 bind mounts方式挂载数据卷
# 利用docker run/create的参数为容器挂载数据卷
# 用法:
方式一: -v, --volume参数
-v 宿主机文件或文件夹路径:容器中的文件或者文件夹路径
方式二:--mount参数
--mount type=bind, src=宿主机文件或文件夹路径, dst=容器中的文件或者文件夹路径
注意:src指定的文件和路径必须提前创建或存在
# 命令演示:
2.3 volumes方式挂载数据卷
# 利用docker run/create为容器挂载数据卷
# 用法:
方式一: -v, --volume参数
-v VOLUME-NAME:容器中的文件或者文件夹路径
方式二:--mount 参数
--mount type=volume, src=VOLUME-NAME, dst=容器中的文件或者文件夹路径
# volume对象管理:
docker volume 命令管理volume数据卷对象
docker volume create 创建数据卷对象
docker volume inspect 查看数据卷详细信息
docker volume ls 查看已创建的数据卷对象
docker volume prune 删除未被使用的数据卷对象
docker volume rm 删除一个或多个数据卷对象
2.4 tmpfs mount方式挂载数据卷
# 利用docker run/create为容器挂载数据卷
# 用法:
--mount type=tmpfs, dst=PATH
2.5 共享其他容器的数据卷-数据卷容器
# 利用docker run/create 的--volumes-from参数指定数据卷容器
# 用法:
docker run/create --volumes-from CONTAINER
三 Docker 数据卷注意事项
Docker的数据卷更多会是使用volumes方式来进行使用。使用时需注意:
•如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
•如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。
Dockerfile
一 Dockerfile 简介
- Dockerfile其实就是根据特定的语法格式撰写出来的一个普通的文本文件
- 利用docker build命令依次执行在Dockerfile中定义的一系列命令,最终生成一个新的镜像(定制镜像)
二 Dockerfile 示例与使用
2.1 Dockerfile参考示例
mkdir dockerfile_test
cd dockerfile_test
vim Dockerfile
# Test
# VERSION 0.01
FROM ubuntu
RUN echo 'hello world'
CMD ["echo","this is image create by lqz"]
docker build # 构建
2.2 Dockerfile使用命令 – docker build
# 作用:
根据dockerfile创建镜像
# 命令格式:
docker build [OPTIONS] PATH | URL | -
# 命令参数:
PATH Dockerfile所在路径(文件夹路径),文件名必须是Dockerfile
URL Dockerfile所在URL地址
OPTIONS:
-t, --tag list 为镜像设置名称和tag
-f, --file string 指定Dockerfile的路径(这是可以使用其他名称命名Dockerfile)
三 Dockerfile 特征
3.2 Dockerfile 构建特征
查看官方的Dockerfile:https://github.com/docker-library/docs
- Dockerfile必须具备一个FROM命令来进行构建
- 每一个Dockerfile命令都会构建一层镜像(本质上是每一层都会启动一个容器,执行完命令后,将容器进行提交后,产生新的镜像层)
- 通过查看下载下来的镜像,发现历史层信息的层ID是missing,其实是因为原本的层id只存在于构建镜像的宿主机上,一旦转移镜像后,历史层消息中将只保留最新一层的ID
四 Dockerfile 命令概述
4.1 Dockerfile 命令概述(一)
FROM: 指定基础镜像
RUN: 构建镜像过程中需要执行的命令。可以有多条。docker build
CMD:添加启动容器时需要执行的命令。多条只有最后一条生效。可以在启动容器时被覆盖和修改。
ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。
:为镜像添加对应的数据。
MLABELAINTAINER:表明镜像的作者。将被遗弃,被LABEL代替。
EXPOSE:设置对外暴露的端口。
ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效
ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失
ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL作为要拷贝的文件
COPY:将本地文件或目录拷贝到镜像的文件系统中。
VOLUME:添加数据卷
USER:指定以哪个用户的名义执行RUN, CMD 和ENTRYPOINT等命令
WORKDIR:设置工作目录
ONBUILD:如果制作的镜像被另一个Dockerfile使用,将在那里被执行Docekrfile命令
STOPSIGNAL:设置容器退出时发出的关闭信号。
HEALTHCHECK:设置容器状态检查。
SHELL:更改执行shell命令的程序。Linux的默认shell是[“/bin/sh”, “-c”],Windows的是[“cmd”, “/S”, “/C”]。
docker 配置pycharm连接
1 原理介绍
2 操作 docker宿主机
# 1 配置运行远程客户端连接docker
vim /lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
将管理地址写入 /etc/profile
执行命令:echo 'export DOCKER_HOST=tcp://0.0.0.0:2376' >> /etc/profile
执行命令:source /etc/profile
重启服务
执行命令: systemctl daemon-reload && systemctl restart docker
# 2 vim /etc/docker/daemon.json
{
"hosts": ["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"]
}
systemctl daemon-reload && systemctl restart docker
# 启动会报错,因为/lib/systemd/system/docker.service和该文件的本地连接配置冲突,修改/lib/systemd/system/docker.service
vim /lib/systemd/system/docker.service
...
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
#改为
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
...
systemctl daemon-reload
systemctl restart docker
curl 127.0.0.1:2376/version
http://10.0.0.102:2376/version
3 修改本地pycharm配置
1 打开设置,搜索docker
2 选择TCP socket
3 填入:tcp://101.133.225.166:2376
4 Certificates folder暂时不填,Path mappings:暂时删掉
5 点击ok,在下面就能看到图形界面的管理
6 选择新的解释器(使用docker的解释器)解释器---》add---》docker--》默认会选中,点击ok(稍等一会,需要连接)
7 修改运行文件(可以看到目录映射,现在我们需要把代码传到宿主机的:/Users/liuqingzheng/PycharmProjects/llqz_test 路径)
8 配置sftp,远程上传代码
9 点 + 新建,输入名字
10 选择Mappings,配置上传的目录
11 上传代码,在项目上右键,Deplayment--》上传
运行代码即可
12 也可以选择tools-->Deployment-->Automatic Upload,每次改完代码会自动上传
13 我们无法安装模块,所有通过Dockerfile方式构建镜像,再切换解释器为新构建的镜像
14 写完直接在Dockerfile上右键运行
15 这样运行构建的镜像没有名字,我们可以配置,指定构建成的镜像名字
16 构建完成,重新选择该镜像作为解释器即可
最后:docker pull 的时候报错
error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/b6/b63ef4ef530f7ff2d368fb0df9c28840a285e503c8710aa29e7e1da54cbb6f54/data?verify=1588096454-x6AMkkUV0qUaOPWhqC%2FQpkcJ1RA%3D: x509: certificate has expired or is not yet valid
# 提示x509:证书已过期或尚未生效。则是系统时间错误。只要同步一下网络时间即可。同步网络时间命令:
data
yum install ntpdate -y
ntpdate ntp1.aliyun.com
Docker系列——介绍、安装、镜像、容器、docker容器与镜像、数据卷、Dockerfile、docker 配置pycharm连接的更多相关文章
- docker 数据卷和docker数据卷容器以及数据卷的备份和还原
一:数据卷 1.什么是数据卷 数据卷是通过特殊设计的目录,可以绕过联合文件系统,为一个或者多个容器提供服务,数据卷是在docker宿主机当中,数据卷可以是文件也可以是文件夹. 2.特点 1.数据卷在容 ...
- 数据卷之Docker File
DockerFile 是用来构建Docker镜像的构建文件,是由一些列命令和参数构成的脚本.后面再详细了解 DockerFile ! 1.我们在宿主机 /home 目录下新建一个 docker-tes ...
- Docker详细介绍安装与镜像制作和拉取
一.Docker是什么? 产生背景: 开发和运维之间因为环境不同和导致的矛盾(不同的操作系统.软件环境.应用配置等)DevOps 代码.系统.环境.配置等封装成镜像Image--->运维: 集群 ...
- Docker Compose 介绍安装
Compose介绍 Compose是一个定义和管理多容器的工具,也是一种容器编排工具,前身是Pig,使用Python语言编写.使用Compose配置文件描述多个容器应用的架构,biubiu使用什么镜像 ...
- Java篇:Docker的介绍安装 和常用命令
文章目录 为什么 出现docker Docker的简介 容器(Container) 镜像(Image) 仓库(Repository) Docker的安装 查看容器 删除镜像 删除容器 部署应用 以my ...
- Docker系列(四)Centos6.5 搭建私人镜像仓库 v2
.下载.运行registry 下载registry镜像: $ docker pull hub.c.163.com/library/registry 这个下载的过程有点长,耐心等待一下.O(∩_∩)O哈 ...
- docker系列之安装配置-2
1.docker安装 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 目前,C ...
- Docker数据卷和Docker系统管理(一)
一. 创建和挂载数据卷 1. 创建数据卷 (1)执行下列命令,创建一个名为my-data的数据卷 [root@c720120 ~]# docker volume create my-data my-d ...
- Docker数据卷和Docker系统管理(二)
一. 在镜像中定义卷 1. Dockerfile中定义卷的案例 VOLUME /app/data VOLUME /app/data, /app/profiles, /app/config VOLUME ...
- Docker系列(一)安装
操作系统版本:Centos7 Docker版本:1.8 设置安装源 1 cat > /etc/yum.repos.d/docker.repo << -EOF 2 [dockerr ...
随机推荐
- 云上使用 Stable Diffusion ,模型数据如何共享和存储
随着人工智能技术的爆发,内容生成式人工智能(AIGC)成为了当下热门领域.除了 ChatGPT 之外,文本生成图像技术更令人惊艳. Stable Diffusion,是一款开源的深度学习模型.与 Mi ...
- React学习时,自己拟定的一则小案例(table表格组件,含编辑)
某次在Uniapp群看到有人问uniapp如何操作dom元素. 他想对这张表标红的区域,做dom元素获取,因为产品想让红色色块点击时,成为可编辑,渲染1~4月份之间的行程安排. 于是,有小伙伴说让他用 ...
- kali问题排查
kali从2020的更新到最新版就卡在了启动界面 猜想会不会是内核的问题,选择到这个最新内核就可以正常进入系统了 由于觉得这样启动太过于麻烦,想办法把这个内核作为默认启动内核,从网上了解到要修改/et ...
- 力扣744:寻找比目标字母大的最小字母; LeetCode744:Find Smallest Letter Greater Than Target
题目见文末 LeetCode link 思路及题解 手写二分 源码: class Solution: def nextGreatestLetter(self, letters: List[str], ...
- Python Django 零基础从零到一部署服务,Hello Django!全文件夹目录和核心代码!
在这篇文章中,我将手把手地教你如何从零开始部署一个使用Django框架的Python服务.无论你是一个刚开始接触开发的新手,还是一个有经验的开发者想要快速了解Django,这篇教程都会为你提供一条清晰 ...
- Android实时获取摄像头画面传输至PC端
前言 最近在做一个PC端小应用,需要获取摄像头画面,但是电脑摄像头像素太低,而且位置调整不方便,又不想为此单独买个摄像头.于是想起了之前淘汰掉的手机,成像质量还是杠杠的,能不能把手机摄像头连接到电脑上 ...
- 深入探索 Django Rest Framework
这篇文章会详细介绍Django REST Framework的核心组成部分,包括Serializers.ViewSets.Routers.权限和认证系统以及测试和调试工具.文章从基础开始,逐步深入,旨 ...
- Kernel panic 堆栈信息怎么看
Kernel panic 是指 Linux 内核遇到了无法继续执行的致命错误,此时会在屏幕上输出一些错误信息,其中就包括堆栈信息.堆栈信息是指发生错误时 CPU 执行的代码路径,可以通过堆栈信息来定位 ...
- Shell 摘抄:growpart中的参数处理
下面这段代码中,变量cur表示这次循环所要处理的参数.如果没有触发前面的选项开关,第一个参数会被赋值给$DISK,第二个参数会赋值给$PART. 强无敌!- while [ $# -ne 0 ]; d ...
- Nacos启动时报错No DataSource set排查
问题描述 最近在学习Nacos组件,使用的是最新版本:2.2.3. 在本地虚拟机CentOS 8.5.2111环境中安装Nacos,并使用standalone模式启动,同时配置使用外部MySQL数据库 ...