年轻人的第一个 Docker 应用,大大提高生产力!
哈哈,标题我抄了雷总的,不重要哦,重要的是 Docker 真的很年轻,虽然现在才不到 8 岁,但却是个冉冉升起的巨星,火得一塌糊涂。
这几年 Docker 实在太火了,Docker 是干嘛的?做 Java 的怎么能不知道 Docker?所以,本篇栈长带大家来做第一个 Docker 应用,你就有个基本认识了。
可能有些人觉得 Docker 和自己没多大关系,自己写好代码就行了,Docker 那是运维用的东西,看完这篇,我想改变你的想法。
一、什么是 Docker?
Docker 是现在最主流的开源容器,遵循 Apache 2.0 协议,使用 GO 语言进行开发,始于 2013 年,现已加入 Linux 基金会。
Docker 的核心思想是:"Build once, Run anywhere",即:一次构建,处处运行,这里可以是一个操作系统、一个 Web 应用,或者一个数据库服务等。
我们可以将 Docker 理解为一个轻量级的沙盒,Docker 容器完全使用沙盒机制,每个容器内都有其独立运行的环境和组件,容器之间是相互隔离互不影响的,也可以进行容器间的通信。
Docker 支持所有主流的操作系统,如:Linux/Mac/Windows,所有主流的云服务也支持 Docker,所以,我们可以将应用及依赖、环境信息等打包到一个 Docker 容器中,可以很轻松的实现应用发布、迁移等。
Docker 官网:
Docker 代码托管:
二、安装 Docker
Docker 有社区版、企业版。社区版是开源免费的,企业版是收费的,当然也会有更牛逼的特性和服务,一般的应用社区版的足够了。
Docker 的安装十分简单,栈长这里以 Mac 和 Docker 社区版为例作为安装演示。
打开 Docker 开始页:

下载 Mac 版 Docker 安装包直接安装即可。
安装完后使用 docker -v 命令进行可以查看 Docker 版本:
$ docker -v
Docker version 19.03.13, build 4484c46d9d、
使用 docker version 还可以看到完整版本信息:
docker version
Client: Docker Engine - Community
Cloud integration 0.1.18
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 16:58:31 2020
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:07:04 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
看到 Docker 版本信息表示安装成功了。
三、启动 Docker
Mac 版本的 Docker 只要点击应用图标进入就自动启动了,也可以设置开机自动启动。
Mac 版 Docker 官方就自带了控制台客户端,通过 Dashboard 菜单进入。

通过控制台可以进行容器、镜像的管理、设置等。
总之 Docker 的安装和启动都非常简单,不同的系统环境都可以轻松完成。
四、第一个 Docker 应用
熟悉 Tomcat 的朋友都知道,Tomcat 安装后 Webapp 下面会自带一些 Web 项目。关于 Tomcat 系列教程可以关注公众号Java技术栈搜索阅读。
Docker 也是如此,Docker 安装完后也会自带一些镜像,可以在控制台中看到,也可以使用docker images 命令查看本地所有 Docker 镜像。
如下图所示,切换到 Images:
Docker 自带了一个 docker tutorial 镜像,这是一个学习 Docker 的向导镜像,本身是一个 Web 应用的镜像,怎么把它启动起来呢?
镜像只是一个只读的静态文件,不能运行,容器才是镜像的运行实例,所以需要新增一个容器来运行。
客户端运行
最简单的方法是点击该镜像右边的运行按钮:

在上面的对话框中填写容器的必要信息,如这里容器的端口和映射本机的端口都是 80,最后点击运行按钮。

这里 Docker 容器中多了一个刚才新建的 docker-tutorial 容器,并且运行在 80 端口。
那么我们来访问一下这个 Docker 应用,通过该容器右侧的打开浏览器或者输入 http://localhost/ 进行访问:

恭喜你,已经运行成功了!
命令行运行
客户端操作只是辅助,命令行才是精髓,学习 Docker 我们也要记住常用的命令,其实我们刚才新建容器、运行容器都是通过这条命令一次完成的:
docker run -d -p 80:80 docker/getting-started
这样就等同于基于镜像新建容器、再运行该容器。
简单解释下各个参数的意思:

也可以缩简成:
docker run -dp 80:80 docker/getting-started
所以还是以这个镜像为例,先在客户端停掉该容器,然后再用命令来启动下:
$ docker run -dp 80:80 docker101tutorial
9df38488adcc2a53dad65691854ffc603e1fb3e25954183b83200809805b0d93
启动成功会输出该容器的 ID.
通过 docker ps 命令可以查看所有正在运行中的容器:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9df38488adcc docker101tutorial "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp hopeful_gauss
可以看到,我们的 docker101tutorial 容器又运行起来了,也可以正常访问。
另外,通过 docker ps -a 命令可以查看所有容器。
四、结语
本文栈长简单介绍了下 Docker 的基本概念,Docker 的安装和启动,以及第一个 Docker 应用的运行。
有了 Docker 镜像,我们就能在任何安装有 Docker 的机器上运行,不用再重复配置环境安装依赖等,是不是很爽?
Docker 公共仓库中还有许多官方提供好的镜像,如:Nginx、MySQL、Redis 等,都可以直接就能拿来用,所以,别再说 Docker 只是运维用的东西,和 Java 开发没多大关系,用好它,我们开发效率杠杠的,也能提高我们的技术水平。
好了,第一个年轻人的 Docker 应用就到这里了,后续栈长还会带来更多 Docker 实用性的教程,比如 Spring Boot 的部署以及与 IDEA 的集成使用等,关注公众号Java技术栈第一时间推送。
觉得不错,在看、分享转发一下,写文章不易,需要你们的鼓励,感谢各位老铁们!
版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重他人劳动成果和知识产权。
近期热文推荐:
1.Java 15 正式发布, 14 个新特性,刷新你的认知!!
2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!
3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。
觉得不错,别忘了随手点赞+转发哦!
年轻人的第一个 Docker 应用,大大提高生产力!的更多相关文章
- 每周开源项目分享-年轻人的第一个OAuth2.0 Server:hydra
年轻人的第一个OAuth2.0 Server:hydra hydra 是什么呢? OpenID Connect certified OAuth2 Server - cloud native, secu ...
- Docker | 第二章:第一个Docker应用
前言 上一章节,已经简单讲解了Docker相关方面的知识,相信大家已经有个概念了.这章节开始,开始进行实践操作.和学习任何一门语言一样,我们今天也开始从Hello,World开始~ 对Docker不了 ...
- 给Ocelot做一个Docker 镜像
写在前面 在微服务架构中,ApiGateway起到了承前启后,不仅可以根据客户端进行分类,也可以根据功能业务进行分类,而且对于服务调用服务也起到了很好的接口作用.目前在各个云端中,基本上都提供了Api ...
- 一步步创建第一个Docker App —— 2. 创建 Docker化 主机
原文:https://docs.docker.com/engine/getstarted-voting-app/node-setup/ 部署voting app的第一步,是为集群节点(swarm no ...
- .net core 下的一个docker hello world
接触 docker 有段时间了,发现docker这个东西,真是越用越爽. 那就从零开始跑一个 docker simple . 方法一: 步骤一: dotnet new mvc --name myweb ...
- 设计一个缓存器 ReadLock提高性能
/** * * @描述: 设计一个缓存器 ReadLock提高性能. * @作者: Wnj . * @创建时间: 2017年5月16日 . * @版本: 1.0 . */ public class C ...
- 年轻人的第一个 Spring Boot 应用,太爽了!
Spring Boot 大家都知道是啥吧? 还有不知道的来看这篇扫下盲:告诉你,Spring Boot 真是个牛逼货!. 顺便再往下看,栈长给你带来年轻人的第一个 Spring Boot 应用,撸码史 ...
- windows环境30分钟从0开始快速搭建第一个docker项目(带数据库交互)
前言 小白直接上手 docker 构建我们的第一个项目,简单粗暴,后续各种概念边写边了解,各种概念性的内容就不展开,没了解过的点击 Docker 教程 进行初步了解. Docker 是一个开源的应用 ...
- 使用nexus搭建一个docker私服
使用nexus搭建docker私服 一.需求: 二.实现步骤 1.编写`docker-compose`文件,实现`nexus`的部署 2.修改/usr/lib/systemd/system/docke ...
随机推荐
- Windows Server 2003 蓝屏 -- 系统故障:停止错误
Windows Server 2003 EE 出现蓝屏: 0X0000004D (0X000f27D9, 0X000F27D9, 0X0000000C, 0X00000000) 蓝屏拍照: 重启机器 ...
- 视频+图文教程 | Java之安装JDK与环境配置
演示所用软件JDK 8与Eclipse(Java开发工具)软件下载链接: 链接:https://pan.baidu.com/s/1Vg9ulrQH8WlGRAE89Y02UA提取码:swwl 视频介绍 ...
- 6.Android-五大布局
Android 五大布局如下所示: LinearLayout 线性布局 只能指定一个方向(垂直/水平)来布局 RelativeLayout 相对布局 通过某个控件为参照物,来定位其它控件的位置的布局方 ...
- 多测师讲解selenium _下拉框的定位_高级讲师肖sir
from selenium import webdriver from selenium.webdriver.support.ui import Select#导入类from time import ...
- C语言实现和 *.ini文件。
本文之前由于技术不到位,写的比较挫,最近花了大半天时间写了一个高级点的版本. 这里是我写的代码,已经上传到github了.跳转到github 主要是使用了链表保存ini文件的内容,在程序运行最初会初始 ...
- unix socket接口
socket 创建套接字文件: #include <sys/socket.h> // 成功返回非负套接字描述符,失败返回-1 int socket(int domain, int type ...
- CentOS8平台nginx日志的定时切分
一,编写bash脚本: [root@yjweb crontab]# vi split_nginx_logs.sh 代码: #!/bin/bash # 备份nginx的日志 # 昨天的日期 file_d ...
- java安全编码指南之:Thread API调用规则
目录 简介 start一个Thread 不要使用ThreadGroup 不要使用stop()方法 wait 和 await 需要放在循环中调用 简介 java中多线程的开发中少不了使用Thread,我 ...
- dns配置文件的方式
1./etc/resolve.conf /etc/resolv.conf它是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序.该文件是由域名解析 器(res ...
- ERROR [RMI TCP Connection(3)-127.0.0.1] - init datasource error
运行报错 ERROR [RMI TCP Connection(3)-127.0.0.1] - init datasource error, url: jdbc:mysql://localhost:33 ...