Docker

D ocker

什么是Docker

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

Docker三大核心概念

镜像:

Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。例如:一个镜像可以是一个完整的 Cent OS 操作系统环境,称为一个 CentOS 镜像;也可以是一个安装了 MySQL 的应用程序,称之为一个 MySQL 镜像等等。

Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经创建好的镜像直接使用。

容器:

Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器 都是相互隔离、互不可见,以保证安全性的平台。可以将容器看作是一个简易版的 Linux 环境, Docker 利用容器来运行和隔离应用。

仓库:

Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用 push 命令将它 上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像 时,只需从仓库获取

安装Docker

安装最新版Docker

使用yum仓库安装Docker

复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2 

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum -y install docker-ce docker-ce-cli containerd.io

使用curl安装Docker

复制代码
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
使用阿里云安装docker
复制代码
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

启动Docker并设置为开机自启动

复制代码
# 启动服务
systemctl start docker
systemctl enable docker

查看Docker版本

安装好的 Docker 系统有两个程序,Docker 服务端和 Docker 客户端。其中 Docker 服务端是一个服务进程,负责管理所有容器。Docker 客户端则扮演着 Docker 服务端的远程控制器,可以用来控制 Docker 的服务端进程。大部分情况下 Docker 服务端和客户端运行在一台机器上

复制代码
docker version

Docker镜像操作

搜索镜像

复制代码
docker search nginx

获取镜像

复制代码
#docker pull 仓库名称[:标签]
docker pull nginx
docker pull nginx:1.20

查看镜像信息

复制代码
#docker images 仓库名称:[标签]
#例如:查看本地所有镜像
docker images
#另一种写法
docker image ls
#根据镜像的唯一标识 ID 号,获取镜像详细信息
docker inspect c20060033e06

为本地镜像添加标签

复制代码
#docker tag名称:[标签]新名称:[新标签]
docker tag nginx nginx_test:1.0

镜像导出

复制代码
docker save -o nginx-latest.tar nginx:latest
docker save -o nginx-1.20.tar nginx:1.20

删除镜像

复制代码
#用名字删除
docker pull nginx:1.20
#用id号删除
docker pull c20060033e06
#在尾部添加-f选项即可强制删除

#删除所有镜像
docker images -q | xargs docker rmi -f

导入镜像

复制代码
docker load < nginx-latest.tar


docker load -i nginx_latest.tar

查看镜像的信息

复制代码
#docker inspect 要显示的详情
docker inspect nginx:latest

修改镜像名称

复制代码
#docker tag 旧名字 新名字
docker tag nginx nginx_kgc:v1

容器

容器是 Docker 的另一个核心概念。简单说,容器是镜像的一个运行实例,是独立运行的一个 或一组应用以及它们所必需的运行环境,包括文件系统、系统类库、shell 环境等。镜像是只读模 板,而容器会给这个只读模板添加一个额外的可写层

容器的创建

复制代码
#docker create [选项]镜像 运行的程序
#常用选项: 
#-i 让容器的输入保持打开 
#-t 让 Docker 分配一个伪终端
#--name 指定容器名称,如果不加的话容器名称是随机生成的

启动与关闭

复制代码
docker start myname
docker stop myname
#一条指令启动与关闭
docker run centos:7.6.1810 bash -c ls /

查看容器

复制代码
docker ps -a

删除容器

复制代码
docker rm myname

#删除所有容器
docker ps -aq | xargs docker stop
docker ps -aq | xargs docker rm

容器的进入

复制代码
docker exec -it 容器 ID/名称 /bash 
#其中: 
#-i 选项表示让容器的输入保持打开; 
#-t 选项表示让 Docker 分配一个伪终端
#exit 退出容器
#pwd 显示当前位置

在容器里传输文件

复制代码
#docker cp 要放的文件 容器名字:/存放位置
docker cp nginx-latest.tar 容器名:/root/nginx-latest.tar
#从容器中拿出文件
docker cp 容器名:/root/nginx-latest.tar ./

容器的导入导出

复制代码
#docker export 容器名 > 存放名
docker export confident_babbage > mynginx.tar
#把文件导成镜像
#cat 文件名| docker import -- 生成的镜像名称:标签
cat mynginx.tar | docker import - mynginx:1.0
复制代码
docker run -d -P --name nginx01 nginx:latest

#-P:随机端口映射
#-p:指定端口映射
#-d:放在后台启动
docker run -d -p 823:80 --name nginx02 nginx:latest

docker的特性

1.下载镜像的时候,镜像在仓库里是压缩的,下载到容器里就是解压的

数据卷

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上, 对 数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于 Linux 下对目录进行的 mount 操作

创建数据卷

复制代码
docker run -d -v /data1 -v /data2 --name web nginx:latest

# -v 创建数据卷
复制代码
#与宿主机目录挂载同步
docker run -d -v /var/www/:/data1 --name web-1 nginx:latest
相关推荐
ZhengEnCi4 分钟前
J1B-为什么99%的人配置Java环境失败?大厂开发者5分钟搞定的JDK安装与环境配置完全指南
java
零雲8 分钟前
java面试:有了解过kafka架构吗,可以详细讲一讲吗
java·面试·kafka
lxmyzzs9 分钟前
vscode-ssh无法进入docker问题解决
vscode·docker·ssh
一行•坚书14 分钟前
kafka服务端与客户端如何协作?生产者发送消息分区策略是什么?消费者组分区策略?集群与ACK机制?
java·后端·kafka
Candice_jy17 分钟前
vscode运行ipynb文件:使用docker中的虚拟环境
服务器·ide·vscode·python·docker·容器·编辑器
serve the people29 分钟前
Prompt Composition with LangChain’s PipelinePromptTemplate
java·langchain·prompt
天天摸鱼的java工程师30 分钟前
干掉系统卡顿!Excel异步导出完整实战方案(百万数据也不慌)
java·后端
心随雨下39 分钟前
Java中将System.out内容写入Tomcat日志
java·开发语言·tomcat
-指短琴长-1 小时前
ProtoBuf速成【基于C++讲解】
android·java·c++
Cx330❀1 小时前
《C++ 搜索二叉树》深入理解 C++ 搜索二叉树:特性、实现与应用
java·开发语言·数据结构·c++·算法·面试