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
相关推荐
GoodStudyAndDayDayUp12 分钟前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶42 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
n北斗1 小时前
常用类晨考day15
java
骇客野人1 小时前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
玖疯子2 小时前
介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
docker
暴富的Tdy2 小时前
【快速上手Docker 简单配置方法】
docker·容器·eureka
yuanbenshidiaos2 小时前
c++---------数据类型
java·jvm·c++
向宇it2 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
Lojarro2 小时前
【Spring】Spring框架之-AOP
java·mysql·spring
莫名其妙小饼干2 小时前
网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
java·开发语言·maven·mssql