Docker入门为什么可以这么简单?

简介: 上一篇已经讲解了为什么需要Docker?,相信大家已经对Docker有一个简单的认识了。这篇我来讲讲Docker入门的相关概念和常用的命令,跟大家一起入门Docker!

一、Docker相关术语


一般从零学习一门技术(语言),都是从HelloWorld开始的,但这次我偏不。我先来讲讲Docker的相关术语~

  • 镜像
  • 容器
  • 仓库

在之前分享的Docker科普文,也通俗易懂地讲解了这三个术语:

镜像、容器、仓库的概念可以类比代码、进程、github


如果让我来给完全不懂Docker解释这三个术语,我会这样做:

  • 镜像就是镜像,我们重装系统/搞虚拟机的时候都要用镜像,没镜像哪来系统
  • 我们安装完镜像,就可以跑起来一个系统(Windows也好、Centos也好),于是我们就可以愉快地使用我们通过镜像安装好的系统了。
  • 在Docker中,通过镜像运行起来的东西叫做容器
  • 仓库就是专门存放镜像的地方

镜像(image)【image除了图片/图像的意思外,还有镜像的意思】

容器(container)通过镜像运行起来的实例

仓库(reposity)专门存放镜像的地方


二、安装Docker与HelloWorld


首先需要明确自己所使用的环境,就我而言,我使用的是CentOS 7。据我所知,CentOS 7CentOS 6.8在安装中都是有区别的。

所以,如果你想跟着我一起安装Docker,先明确自己的版本是否是CentOS 7,如果不是只能找其他的教程来进行安装。

cat /etc/redhat-release
// 结果
CentOS Linux release 7.3.1611 (Core)


2.1安装Docker


首先我们需要安装GCC相关的环境:

// 安装GCC相关的环境
yum -y install gcc
yum -y install gcc-c++

如果曾经安装过Docker(旧版本)的话,得先卸载,如果没有安装过,跳过这一步:

// 卸载旧Docker版本
yum -y remove docker docker-common docker-selinux docker-engine

安装Docker需要的依赖软件包:

// 安装Docker需要的依赖软件包:
yum install -y yum-utils device-mapper-persistent-data lvm2

设置stable镜像仓库(注意:我们这里使用国内的镜像地址【因为Docker 官网给出的地址在国外,太慢了!】)

// 设置stable镜像仓库:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引:

// 更新yum软件包索引:
yum makecache fast

安装DOCKER CE(注意:Docker分为CE版和EE版,一般我们用CE版就够用了)

// 安装DOCKER CE:
yum -y install docker-ce

启动Docker

// 启动Docker
systemctl start docker


2.2HelloWorld走起


到上面为止,我们已经启动了Docker,下面我们检验一下我们运行的Docker是否正常。

首先,我们可以看看下载回来的Docker版本:

// 查看Docker的版本
docker version

50.jpg

版本都查到了,说明Docker是运行起来的啦。我们来一发HelloWorld:

// docker的HelloWorld
docker run hello-world

效果:

51.jpg

简单解释:docker run hello-world这条命令指示Docker去运行hello-world这个镜像,但是我们本地没有这份镜像啊。所以Docker就去DockerHub拉取了一份hello-world镜像,并运行起来了(生成容器)。这个hello-world容器的功能就是一句话:Hello from Docker!。所以我们在屏幕上就可以看到这句话了。


2.3配置加速器


由于安装的Docker默认是去Docker Hub找我们想要的镜像的,我们知道国外肯定没国内的快,所以我们一般会配置一个加速器

国内的镜像仓库一般我们使用的有:

  • 阿里云
  • 网易云
  • // 等等

首先,我们到下面链接搜索一下镜像,比如Tomcat (这就需要我们注册/登录一个阿里云账号)

随后,我们可以在镜像加速器上找到我们的url:

52.png

我们依照阿里云给出的教程,就可以配置加速器了。

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://cubmirje.mirror.aliyuncs.com"]
}
EOF

让配置生效,并重启Docker

systemctl daemon-reload
systemctl restart docker

不知道大家学到这里,觉得怎么样。如果是我,我肯定觉得没意思。搞了个HelloWorld案例,就打印了一句话,没意思


三、体验Docker


假如说,要在一台全新的系统上将Tomcat跑起来。我们需要做以下的事:

  • 安装Java,配置环境变量
  • 安装Tomcat

如果我们用了Docker,我们是这样做的:直接在仓库里拉一份tomcat的镜像下来,将镜像跑起来就,就完事了!

拉取Tomcat镜像:

docker pull tomcat

53.png

docker images查看是否有拉取到的tomcat

docker image ls

拉取到的Tomcat镜像:

54.png

运行这个Tomcat镜像,生成容器

docker run -it -p 9999:8080 tomcat

我们可以发现,这个Tomcat运行起来了

55.jpg

(没运行起来,踩坑了!,一直卡在INFO: Deploying web application directory这句话上了。我还一直想,为啥我访问不到呢,才发现没运行起来)


3.1解决docker运行Tomcat卡住的问题


原因:

docker+tomcat 启动时非常慢,一般正常启动几十秒的,发现docker+tomcat启动竟需要几分钟,不可思议

根本原因是 SecureRandom 这个 jre 的工具类的问题。那为什么 SecureRandom generateSeed 这么慢,甚至挂在 Linux 操作系统呢?

Tomcat 7/8 都使用 org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 类产生安全随机类 SecureRandom 的实例作为会话 ID。

SecureRandom generateSeed  使用 /dev/random 生成种子。但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待

首先,我们先以后台的方式运行Tomcat镜像:

docker run -tid  tomcat

以bash的方式进入到容器中:

docker exec -it 4a471223bfc4(为你正在运行容器的id) /bin/bash

为容器安装vim:

apt-get update
apt-get install vim

修改对应的java.security文件

cd /docker-java-home/jre/lib/security
vim  java.security

找到 securerandom.source=file:/dev/random,修改为securerandom.source=file:/dev/./urandom

在Tomcat镜像下创建一个属于我们自己的Tomcat镜像(这个镜像安装了vim,修改了配置文件)

docker commit -m "change java.security" -a "3y" 4a471223bfc4(为当前容器的id) mytomcat

于是我们就生成了mytomcat镜像,就可以使用mytomcat:

docker run -it -p:9999:8080 mytomcat

效果图:

56.jpg

目录
相关文章
|
2月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
137 2
|
3月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
98 5
|
1月前
|
Ubuntu 应用服务中间件 nginx
docker入门-快速学会docker
本文介绍了Docker的基本概念,包括镜像、容器、tar文件、Dockerfile和仓库,并通过实际操作演示了如何使用Docker。从拉取Nginx镜像、运行容器、修改容器内容、保存容器为新镜像,到使用Dockerfile构建自定义镜像,最后讲解了如何保存和恢复镜像。文中还推荐了一个在线实践平台Play with Docker,方便读者快速上手Docker。
111 5
docker入门-快速学会docker
|
3月前
|
Linux 持续交付 Docker
掌握Docker:从入门到实践
Docker 是一个开源容器引擎,允许开发者将应用及其依赖打包成可移植的容器,在任意 Linux 机器上运行。本文从基本概念入手,详细介绍 Docker 的安装、基本操作、镜像构建及 Docker Compose 的使用,并通过实战案例展示如何部署 Web 应用、构建微服务架构及实现 CI/CD。通过学习,你将掌握 Docker 的核心功能,提升应用开发和部署效率。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
2月前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
2月前
|
运维 持续交付 虚拟化
docker入门详解!!!
本文介绍了容器技术的发展历程,从物理机到虚拟化再到容器化,重点讲解了Docker的诞生及其优势。Docker通过轻量级的容器技术,实现了资源的高效利用、快速启动、环境一致性、持续交付和部署等优点。文章还详细解析了Docker的架构和工作原理,包括Docker Daemon、REST接口、Docker Client等组件,以及容器与虚拟机的差异。
96 2
|
2月前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
67 3
|
2月前
|
Kubernetes Linux Docker
容器化技术Docker入门与实践
容器化技术Docker入门与实践
68 0
|
3月前
|
Ubuntu Shell 开发者
Docker入门:轻松开始容器化之旅
【10月更文挑战第17天】Docker 是一种开源的应用容器引擎,它让开发者能够“一次构建、到处运行”。Docker 通过容器化技术将应用程序及其依赖打包在一起,从而确保应用在任何环境中都能一致地运行。本文将为新手用户提供一个全面的Docker入门指南,包括基本概念、优势、安装配置以及如何创建和管理容器。
143 2

热门文章

最新文章