首页 > 其他分享 >docker基础安装使用

docker基础安装使用

时间:2023-06-13 14:32:04浏览次数:41  
标签:容器 启动 -- 基础 镜像 docker 安装 Docker



文章目录

  • 一、简介
  • 1、虚拟化
  • 2、Docker组件
  • 2.1 Docker服务器与客户端
  • 2.2 Docker镜像与容器
  • 2.3 Registry(注册中⼼)
  • 3、小结
  • 4、Docker和虚拟机的区别
  • 二、安装Docker
  • 1、安装docker
  • 2、设置`ustc`的镜像
  • 3、docker的启动与停止
  • 三、常用命令
  • 1、镜像相关命令
  • 1.1 查看镜像
  • 1.2 搜索镜像
  • 1.3 拉取镜像
  • 1.4 删除镜像
  • 2、容器相关命令
  • 2.1 容器内容查看
  • 2.2 创建与启动容器
  • 2.3 启动和停止容器
  • 2.4 文件拷贝
  • 2.5 查看容器IP地址
  • 2.6 删除容器
  • 四、常见应用部署
  • 1、MySQL部署
  • 2、Tomcat部署
  • 3、Nginx部署
  • 4、Redis部署
  • 五、数据备份和迁移
  • 1、容器持久化为镜像
  • 2、镜像备份
  • 3、加载镜像文件
  • 六、自定义镜像部署
  • 1、资源准备
  • 2、发布镜像
  • 3、测试



一、简介

1、虚拟化

Docker 是⼀个开源项⽬,诞⽣于 2013 年初,最初是 dotCloud 公司内部的⼀个业余项⽬。它基于 Google 公司推出的 Go 语⾔实现。 项⽬后来加⼊了 Linux 基⾦会,遵从了 Apache 2.0 协议,项⽬代码在 GitHub 上进⾏维护。

docker基础安装使用_运维

为什么选择Docker?

  • (1)上⼿快。

⽤户只需要⼏分钟,就可以把⾃⼰的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应⽤程序也⾮常迅速,可以说达到“随⼼所致,代码即改”的境界。随后,就可以创建容器来运⾏应⽤程序了。⼤多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很⾼的性能,同时同⼀台宿主机中也可以运⾏更多的容器,使⽤户尽可能的充分利⽤系统资源。

  • (2)职责的逻辑分类

使⽤Docker,开发⼈员只需要关⼼容器中运⾏的应⽤程序,⽽运维⼈员只需要关⼼如何管理容器。Docker设计的⽬的就是要加强开发⼈员写代码的开发环境与应⽤程序要部署的⽣产环境⼀致性。从⽽降低那种“开发时⼀切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”

  • (3)快速⾼效的开发⽣命周期

Docker的⽬标之⼀就是缩短代码从开发、测试到部署、上线运⾏的周期,让你的应⽤程序具备可移植性,易于构建,并易于协作。(通俗⼀点说,Docker就像⼀个盒⼦,⾥⾯可以装很多物件,如果需要这些物件的可以直接将该⼤盒⼦拿⾛,⽽不需要从该盒⼦中⼀件件的取。)

  • (4)⿎励使⽤⾯向服务的架构

Docker还⿎励⾯向服务的体系结构和微服务架构。Docker推荐单个容器只运⾏⼀个应⽤程序或进程,这样就形成了⼀个分布式的应⽤程序模型,在这种模型下,应⽤程序或者服务都可以表示为⼀系列内部互联的容器,从⽽使分布式部署应⽤程序,扩展或调试应⽤程序都变得⾮常简单,同时也提⾼了程序的内省性。(当然,可以在⼀个容器中运⾏多个应⽤程序)

2、Docker组件

2.1 Docker服务器与客户端

Docker是⼀个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有⼯作并返回结果。Docker提供了⼀个命令⾏⼯具Docker以及⼀整套RESTful API。你可以在同⼀台宿主机上运⾏Docker守护进程和客户端,也可以从本地的Docker客户端连接到运⾏在另⼀台宿主机上的远程Docker守护进程。

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

docker基础安装使用_运维_02

2.2 Docker镜像与容器

Docker中有几个重要的概念:

镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。

  镜像是构建Docker的基⽯。⽤户基于镜像来运⾏⾃⼰的容器。镜像也是Docker⽣命周期中的“构建”部分。镜像是基于联合⽂件系统的⼀种层式结构,由⼀系列指令⼀步⼀步构建出来
  Docker可以帮助你构建和部署容器,你只需要把⾃⼰的应⽤程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运⾏⼀个或多个进程。我们可以认为,镜像是Docker⽣命周期中的构建或者打包阶段,⽽容器则是启动或者执⾏阶段。 容器基于镜像启动,⼀旦容器启动完成后,我们就可以登录到容器中安装⾃⼰需要的软件或者服务。
  Docker也不关⼼你要把容器运到何⽅:我们可以在⾃⼰的笔记本中构建容器,上传到Registry,然后下载到⼀个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱⼀样,Docker容器⽅便替换,可以叠加,易于分发,并且尽量通⽤。

2.3 Registry(注册中⼼)

  Docker⽤Registry来保存⽤户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。⽤户可以在Docker Hub注册账号,分享并保存⾃⼰的镜像(说明:在Docker Hub下载镜像巨慢,可以⾃⼰构建私有的Registry)。
https://hub.docker.com/

开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。

  • DockerHub:DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。
  • 国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务阿里云镜像库等。

我们一方面可以将自己的镜像共享到DockerHub,另一方面也可以从DockerHub拉取镜像:

docker基础安装使用_容器_03

3、小结

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
  • Docker应用运行在容器中,使用沙箱机制,相互隔离

Docker如何解决开发、测试、生产环境有差异的问题?

  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker是一个快速交付应用、运行应用的技术,具备下列优势:

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  • 启动、移除都可以通过一行命令完成,方便快捷

4、Docker和虚拟机的区别

Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,运行另外一个操作系统,保护系统中的任何应用。

两者有什么差异呢?

虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。

Docker仅仅是封装函数库,并没有模拟完整的操作系统,如图:

docker基础安装使用_docker_04

对比来看:

docker基础安装使用_容器_05

小结:

Docker和虚拟机的差异:

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统
  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

二、安装Docker

1、安装docker

yum 包更新到最新

yum update

安装需要的软件包

yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum源为阿⾥云

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

yum install docker-ce

查看docker版本

docker -v

2、设置ustc的镜像

ustc是⽼牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在⽤。ustc的docker镜像加速器速度
很快。ustc docker mirror的优势之⼀就是不需要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker

https://lug.ustc.edu.cn/wiki/mirrors/help/docker

编辑该⽂件(本身没有该文件,编辑后即可添加):

vim /etc/docker/daemon.json

在该⽂件中输⼊如下内容:

{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

3、docker的启动与停止

启动/停止docker

# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
#	重启docker
systemctl restart docker
# 查看docker状态
systemctl status docker

开机启动docker

systemctl enable docker

查看docker概要信息

docker info

查看docker帮助文档

docker --help

三、常用命令

docker基础安装使用_Docker_06

1、镜像相关命令

1.1 查看镜像

docker images

docker基础安装使用_docker_07

  • REPOSITORY:镜像名称。
  • TAG:镜像标签。
  • IMAGE ID:镜像ID。
  • CREATED: 镜像的创建⽇期(不是获取该镜像的⽇期)。
  • SIZE: 镜像⼤⼩。

这些镜像都是存储在Docker宿主机的/var/lib/docker⽬录下

1.2 搜索镜像

从网路中搜索镜像

docker search 镜像名称
docker search mysql
  • NAME: 仓库名称
  • DESCRIPTION: 镜像描述
  • STARS: ⽤户评价,反应⼀个镜像的受欢迎程度
  • OFFICIAL: 是否官⽅
  • AUTOMATED: ⾃动构建,表示该镜像由Docker Hub⾃动构建流程创建的

1.3 拉取镜像

从中央仓库下载镜像到本地

docker pull 镜像名称
docker pull mysql

1.4 删除镜像

根据镜像ID删除镜像

docker rmi 镜像ID

删除所有镜像

docker rmi 'docker images -q'

2、容器相关命令

2.1 容器内容查看

查看正在运行容器

docker ps

查看所有容器

docker ps -a

查看最后一次运行的容器

docker ps -l

查看停止的容器

docker ps -f status=exited

2.2 创建与启动容器

创建容器命令:docker run

  • -i: 表示运⾏容器
  • -t: 表示容器启动后会进⼊其命令⾏。加⼊这两个参数后,容器创建就能登录进去。即分配⼀个伪终端。
  • –name: 为创建的容器命名。
  • -v: 表示⽬录映射关系(前者是宿主机⽬录,后者是映射到宿主机上的⽬录),可以使⽤多个-v做多个⽬录或⽂件映射。注意:最好做⽬录映射,在宿主机上做修改,然后共享到容器上。
  • -d: 在run后⾯加上-d参数,则会创建⼀个守护式容器在后台运⾏(这样创建容器后不会⾃动登录容器,如果只加-i -
  • -p: 表示端⼝映射,前者是宿主机端⼝,后者是容器内的映射端⼝。可以使⽤多个-p做多个端⼝映射t两个参数,创建后就会⾃动进去容器)。

1. 交互式创建容器

docker run -it --name=容器名称 镜像名称:标签 /bin/bash

退出容器

exit

2. 守护式方式创建容器

docker run -di --name=容器名称 镜像名称:标签
#	启动Redis
docker run -di --name=myredis -p 6379:7379 redis

登录守护式容器方式

docker exec -it 容器名称(或容器ID) /bin/bash
#	登录 redis
docker exec -it 35f3bf9a06ef /bin/bash

2.3 启动和停止容器

启动容器

docker start 容器名称(或者容器ID)
#	启动Redis
docker start 35f3bf9a06ef

停止容器

docker stop 容器名称(容器ID)
#	停止Redis
docker stop 35f3bf9a06ef

2.4 文件拷贝

文件拷贝到容器中

docker cp 需要拷贝文件/目录 容器名称:容器目录

容器中文件拷贝出来

docker cp 容器名称:容器目录 拷贝后文件/目录

2.5 查看容器IP地址

docker inspect 容器名称(容器ID)
#	查看Redis的ID
docker inspect 35f3bf9a06ef

直接输出ID

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
#	获取指定IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' 35f3bf9a06ef

2.6 删除容器

docker rm 容器名称(容器ID)
#	先停止容器、然后删除
docker stop 35f3bf9a06ef
docker rm 35f3bf9a06ef

四、常见应用部署

1、MySQL部署

拉取MySQL镜像

docker pull centos/mysql-57-centos7

创建容器

docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7
  • -p :代表端⼝映射,格式为 宿主机映射端⼝:容器运⾏端⼝
  • -e: 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root⽤户的登陆密码

2、Tomcat部署

拉取Tomcat

docker pull tomcat

创建容器

docker run -di --name=mytomcat -p 8080:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat

3、Nginx部署

docker pull nginx

创建Nginx容器

docker run -di --name=mynginx -p 80:80 nginx

4、Redis部署

docker pull redis

创建容器

docker run -di --name=myredis -p 6379:6379 redis

五、数据备份和迁移

1、容器持久化为镜像

将运行中容器持久化为镜像

#	查看在运行容器
docker ps
# 持久化Tomcat
docker commit 78a69ea6da3a mytomcat_1

2、镜像备份

docker save -o [保存的目标文件名称] [镜像名称]

docker基础安装使用_Docker_08

将镜像保存为tar文件

#	查看镜像(1中容器持久化的镜像)
docker images
# 保存为本地文件(mynginx.tar)
docker save -o /data/mynginx.tar mytomcat_1

3、加载镜像文件

将保存到本地的镜像文件,加载到docker中

#	加载镜像
docker load -i mynginx.tar

六、自定义镜像部署

1、资源准备

下载JDK

wget https://codechina.csdn.net/weixin_44624117/software/-/raw/master/software/jdk-8u181-linux-x64.tar.gz

配置Docker打包配置文件:Dockerfile

# 指定基础镜像
FROM centos:8

# 拷贝jdk和java项目的包
COPY ./demo-docker.jar /tmp/app.jar
COPY ./jdk-8u181-linux-x64.tar.gz /tmp/jdk-8u181-linux-x64.tar.gz

# 配置环境变量
RUN cd /tmp \
 && tar -zxvf /tmp/jdk-8u181-linux-x64.tar.gz  -C /tmp

# 配置环境变量
ENV JAVA_HOME=/tmp/jdk1.8.0_181
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8080

# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

创建Java项目并打包

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class Test {
    @RequestMapping("/test")
    public String get() {
        System.out.println("test");
        return "test";
    }
}

打包后的jar包路径

配置完成后文件,完整文件(JDK+Jar+Dockerfile)

2、发布镜像

自定义发布到docker容器中

docker build -t docker_test:1.0 .

运行docker镜像

docker run -di --name=my_docker -p 8080:8080 e6bf70c38c35 /bin/bash

3、测试

curl http://localhost:8080/test/test


标签:容器,启动,--,基础,镜像,docker,安装,Docker
From: https://blog.51cto.com/u_14883832/6469788

相关文章

  • TiDB安装简介
    文章目录一、TiDB概述1、简介2、OLAP和OLTP3、与MySQL兼容性二、架构三、安装1、本地版安装2、单机版集群安装2.1概述2.2安装2.3访问集群3、配置文件地址四、使用方式1、基础SQL2、历史数据查询一、TiDB概述官网地址https://docs.pingcap.com/zh/tidb/stable/quick-start-with......
  • WSL 2中安装VectorCAST
    “转载自维克多汽车技术(上海)有限公司,作者VectorChina”如需在Windows平台上搭建Linux开发和测试环境,常用的方法是使用VMware公司的虚拟化产品如VMwareWorkstation,或VMwarevSphere创建Linux虚拟机。为了精简传统虚拟机或双启动设置的开销,微软在Windows10平台中引入WSL1兼容层......
  • 常见m2eclipse安装错误及其解决方法
    最近学习maven,发现一些安装问题,从网上找了一些解决方法---------------------------------------------------------------------------------错误一:eclipse3.6.1安装maven插件失败解决方法:--------------------------------------------------------------------------------......
  • eclipse 3.6.1 安装maven插件失败的解决办法
      一、eclipse3.6.1下载地址[eclipse-jee-helios-SR1-win32.zip]http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1二、插件地址1、gef插件地址:http://download.eclipse.org/tools/gef/updates/interim/2、subclipse插件地址:http......
  • 开创YouTube视频基础架构新时代
    文/ The YouTubeTeam译 / LiveVideoStack https://blog.youtube/inside-youtube/new-era-video-infrastructure/YouTube工程副总裁ScottSilver按:运行一个全球平台,每天每时每刻都有大量的视频上传、存储和分发,给它的数百万创作者和数十亿观众,这是一项复杂而艰巨的任务。但是......
  • docker-compose搭建wordpress
    前言我们都知道,docker是一个运行容器的软件。同时它也配置了一个运行一组容器的软件,叫做docker-compose。当我们使用非常小规模容器化应用的时候,我们可以使用此docker-compose去做。 docker-compose的介绍根据官网的描述,docker-compose是一个能够管理多容器的工具,可以使用yam......
  • oracle linux 7.9 静默安装oracle 11g
    搭建虚拟机步骤配置ip,步骤省略。 下载linux版本11gOracle安装包,通过sftp上传到虚拟机。oracle11.2.4安装包及补丁包链接如下:链接:https://pan.baidu.com/s/1TaVNOqXCoSjsJJZ-ADLkmw提取码:ycxi前两个zip包为oracle,第三个为grid安装包,只安装数据,则下载1和2即可,如需搭建......
  • 云原生之使用docker部署nginx网站
    (云原生之使用docker部署nginx网站)一、检查本地系统版本[root@node~]#cat/etc/os-releaseNAME="CentOSLinux"VERSION="7(Core)"ID="centos"ID_LIKE="rhelfedora"VERSION_ID="7"PRETTY_NAME="CentOSLinux7(Core)"......
  • 这一切都只是摇摆不定的空气:建立支持音频研究的基础设施
    正文字数:4153 阅读时长:6分钟 Klio到底是什么?它有什么作用?让我们从音频本身的问题开始。文 / DavidRiordanandLynnRoot译 / HelenLyu原文链接/ https://engineering.atspotify.com/2020/11/04/its-all-just-wiggly-air-building-infrastructure-to-support-audio-rese......
  • Ubuntu上安装并使用Docker
    第1步-安装Docker官方Ubuntu存储库中提供的Docker安装包,但是可能不是最新的版本。为了确保我们获得最新版本,我们将从官方Docker存储库安装Docker。为此,我们将添加一个新的资源包,从Docker添加GPG密钥以确保下载有效,然后安装该包。1、首先,更新现有的包列表:sudoaptupdate2、接......