快速入门 Docker,看这一篇文章就够
nanshan 2024-12-02 23:25 9 浏览 0 评论
一、简介
什么是 Docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上运行,方便做持续集成并有助于整体的发布的容器虚拟化技术。
Docker 的应用场景
Web 应用的自动化打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他的后台应用
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境
Docker 的核心概念:
镜像:Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统
容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
仓库:仓库可看成一个代码控制中心,用来保存镜像
???
二、安装配置
安装
安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh
配置镜像加速器
针对 Docker 客户端版本大于 1.10.0 的用户
您可以通过修改 daemon 配置文件
/etc/docker/daemon.json 来使用加速器
各大云服务厂商都有提供镜像加速服务,登录之后可以在自己获取
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://自己的云服务的加速地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
???
三、操作命令
docker 帮助命令
启动 docker :systemctl start docker
停止 docker: systemctl stop docker
重启 docker: systemctl restart docker
查看 docker 状态:systemctl status docker
开机启动:systemctl enable docker
查看 docker 概要信息:docker info
查看帮助文档:docker --help
查看命令帮助文档:docker 命令 --help
镜像命令
列出本地所有镜像:docker images
参数:
-a:列出本地所有镜像
-q:只显示镜像 ID
搜索镜像:docker search 镜像名
下载镜像:docker pull 镜像名:版本
不指定版本,默认下载最新版
查看容器镜像,容器,数据卷所占空间:docker system df
删除镜像 :docker rmi 镜像ID
删除单个:docker rmi 镜像1ID
删除多个:docker rmi 镜像1ID 镜像2ID
容器命令
创建容器:docker run 镜像名
demo:
docker run 镜像名 -i -t --name newname
参数:
-a stdin: 指定标准输入输出内容类型,
可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器 ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="aa": 为容器指定一个名称;
-h "mars": 指定容器的 hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
-m :设置容器使用内存最大值;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
查看容器:docker ps
查看所有启动的容器(包括停止的容器),加参数 -a
docker ps -a
进入容器:`docker exec -it 容器名|ID /bin/bash`
退出容器:容器内执行命令exit
停止容器运行:doker stop 容器名
启动容器:docker start 容器名
删除容器:docker rm 容器名
???
四、数据卷
什么是数据卷
Docker 容器删除后,在容器中产生的数据也会销毁,容器内部如何和外部机器共享数据,容器之间数据交互怎么解决?
配置数据卷
启动容器时,使用参数 -v 设置数据卷
docker run -v 宿主机目录(文件):容器内目录(文件)
同时挂载多个文件和目录
docker run -v 宿主机目录1(文件):容器内目录1(文件) -v 宿主机目录2(文件):容器内目录2(文件)
多个容器挂载同一个文件
docker run -it --name Cb -v /home/data:/v2/data centos
docker run -it --name Cb -v /home/data:/v1/data ubuntu
数据卷容器的配置
创建数据卷容器
docker run -it --name=musen -v /volume centos
创建容器继承数据卷容器的挂载目录
docker run -it --name=a1 --volumes-form centos
数据卷管理命令
查看所有的数据卷
docker volume ls
删除指定的数据卷
docker volume rm 数据卷
查看数据卷的具体位置
[root@ecs-170297 home]# docker volume inspect jenkins_home
[
{
"CreatedAt": "2022-02-16T22:00:38+08:00",
"Driver": "local",
"Labels": null,
# 数据卷数据存储的具体位置
"Mountpoint": "/var/lib/docker/volumes/jenkins_home/_data",
"Name": "jenkins_home",
"Options": null,
"Scope": "local"
}
]
???
五、端口映射
将宿主机的端口和容器内部端口进行映射,实现外部机器可以访问容器
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
docker run -id -p 3307:3306 centos:7
???
六、DockerFile
什么是 Dockerfile?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
镜像制作
容器转为镜像
# 把容器打包为镜像
docker commit 容器ID 镜像名称:版本号
# 把镜像转换为压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
# 将压缩文件还原为镜像
docker load -i 压缩文件名称
通过 Docker File 制作镜像
1、编写 DockerFile 文件
FROM centos:7
MAINTAINER musen<121292679@qq.com>
RUN yum install -y vim
WROKDIR /usr
CMD /bin/bash
2、通过 dockerFile 构建镜像
docker build -f ./xxxDcokerFile -t musenCentos:1 .
参数说明
-f:指定 dockerFile 文件
-t:指定构建出来的镜像名和版本
DockerFile 命令
FROM: 构建镜像基于哪个镜像
MAINTAINER :镜像维护者姓名或邮箱地址
RUN :构建镜像时运行的指令
CMD :运行容器时执行的 shell 环境
VOLUME : 指定容器挂载点到宿主机自动生成的目录或其他容器
USER :为 RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR: 为 RUN、CMD、ENTRYPOINT、COPY和 ADD 设置工作目录,就是切换目录
HEALTHCHECH :健康检查
ARG: 构建时指定的一些参数
EXPOSE :声明容器的服务端口(仅仅是声明)
ENV: 设置容器环境变量
ADD: 拷贝文件或目录到容器中,如果是 URL 或压缩包便会自动下载或自动解压
COPY:拷贝文件或目录到容器中,跟 ADD 类似,但不具备自动下载或解压的功能
ENTRYPOINT:运行容器时执行的 shell 命令
???
七、Docker Compose
简介和安装
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 安装
下载 Compose
# github下载
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 国内镜像下载
$sudo curl -L https://get.daocloud.io/docker/compose/releases/download/2.28.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
将可执行权限应用于二进制文件:
$ sudo chmod +x /usr/local/bin/docker-compose
验证是否安装成功
卸载
$ sudo rm /usr/local/bin/docker-compose
Compose 使用步骤:
使用 Dockerfile 定义应用程序的环境。
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
执行 docker-compose up 命令来启动并运行整个应用程序。
Compose 常用指令
version
指定本 yml 文件按照的 compose 哪个版本编写的。
services
多个容器服务的集合
version: "3.7"
services:
# 容器1
webapp:
build: ./dir
# 容器2
mysql:
xxx: xxx
# 容器3
nginx:
xxx: xxx
build
指定为构建镜像上下文路径:
例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:
version: "3.7"
services:
webapp:
build: ./dir
image
指定容器运行的镜像。以下格式都可以:
version: "3.7"
services:
redis:
image: redis
volumes
将宿主机的数据卷或着文件挂载到容器里。
使用绝对路径进行挂载
version: "3.7"
services:
db:
image: mariadb:latest
volumes:
- "/home/data:/var/mysql/data"
使用的数据卷标进行挂载( 简洁易于管理,但是数据实际存放的位置需要费点周折才能看到 )
version: "3.7"
services:
db:
image: mariadb:latest
volumes:
- [卷标名称]:/var/lib/mysql
volumes:
[卷标名称]:
# 查看卷标的信息
docker volume inspect [卷标名称]
#输出的信息中 Mountpoint 即为数据实际存放的位置
# 查看所有的卷标
docker volume ls
ports
设置宿主机和容器的映射端口
version: "3.7"
services:
db:
image: redis:latest
ports:
- "6379:6379"
expose
暴露端口,但不映射到宿主机,只被连接的服务访问。
仅可以指定内部端口为参数:
expose:
- "3000"
- "8000"
restart
设置容器重启策略
no:是默认的重启策略,在任何情况下都不会重启容器。
always:容器总是重新启动。
on-failure:在容器非正常退出时(退出状态非 0),才会重启容器。
unless-stopped:在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器
container_name
指定自定义容器名称,而不是生成的默认名称。
version: "3.7"
services:
django-app:
container_name: my-web-app
environment
添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。
environment:
MYSQL_ROOT_PASSWORD: pythonvip
MYSQL_DATABASE: test
depends_on
设置容器启动的顺序依赖关系
version: "3.7"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
上面的案例:先启动 db 和 Redis ,才会启动 Web 这个容器
command
覆盖容器启动的默认命令参数
command: ["bundle", "exec", "thin", "-p", "3000"]
links
将指定容器连接到当前连接 ,服务之间可以使用服务名称相互访问
可以设置别名,避免 ip 方式导致的容器重启动态改变的无法连接情况
version: '3'
services:
web:
build: .
links:
# 指定服务名称:别名
- "db:database"
db:
image: mysql
这样 Web 服务就可以使用 db 或 database 作为 host 地址 访问 db 服务了。
今天为大家带来的是深入浅出Docker
特点
- 标准化应用发布,docker容器包含了运行环境和可执行程序,可以跨平台和主机使用;
- 节约时间,快速部署和启动,VM启动一般是分钟级,docker容器启动是秒级;
- 方便构建基于SOA架构或微服务架构的系统,通过服务编排,更好的松耦合;
- 节约成本,以前一个虚拟机至少需要几个G的磁盘空间,docker容器可以减少到MB级;
- 方便持续集成,通过与代码进行关联使持续集成非常方便;
- 可以作为集群系统的轻量主机或节点,在IaaS平台上,已经出现了CaaS,通过容器替代原来的主机。
Docker
Docker的优点
1、简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。
2、避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。Docker 帮你打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
3、节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
总结
Docker一词意为码头工人,而Docker的功能也与集装箱类似。通常一个webapp并不会用到操作系统/虚拟机的全部功能,即操作系统/虚拟机对于一个webapp来说太过笨重。打个比方说,我要从宿舍去食堂,我并不需要一架飞机,只需要一辆自行车就够了,而Docker镜像就相当于是一辆自行车。你可以把Docker镜像理解为轻量化的虚拟机!
Docker的容器是以镜像来创建的,镜像是不是一个类似操作系统的环境? 是的,你可以将Docker理解为一个轻量化的虚拟机,至于我们经常说的什么Tomcat镜像、MySQL镜像之类的,只是这个轻量化的虚拟机中安装了相应的软件。镜像的名字也就说明了镜像的功能。
是不是到正式环境上还要安装Docker,然后把应用部署在其中? 是的,构建Docker镜像、运行Docker容器,都需要安装Docker,但这是一劳永逸的,因为我们使用的是安装了各种各样功能软件的Docker镜像和Docker容器。
最后:
这一份深入浅出Docker.PDF是可以免费送给想要学习的小伙伴!
私信小编:资料,免费领取
————————————————
- 上一篇:docker-compose详解
- 下一篇:什么场景下不适合使用docker?
相关推荐
- 0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)
-
文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...
- ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes
-
为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...
- 生产环境starrocks 3.1存算一体集群部署
-
集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...
- 在CentOS上添加swap虚拟内存并设置优先级
-
现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...
- 国产深度(deepin)操作系统优化指南
-
1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...
- postgresql-15.4 多节点主从(读写分离)
-
1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...
- Docker 容器 Java 服务内存与 GC 优化实施方案
-
一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...
- 虚拟内存设置、解决linux内存不够问题
-
虚拟内存设置(解决linux内存不够情况)背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...
- Elasticsearch性能调优(5):服务器配置选择
-
在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...
- Es如何落地
-
一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...
- 针对Linux内存管理知识学习总结
-
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...
- MySQL进阶之性能优化
-
概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...
- Linux Cgroups(Control Groups)原理
-
LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...
- linux 常用性能优化参数及理解
-
1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)