【Docker系列】全面认识Docker和基本指令

简介: Docker逐渐成为虚拟化技术的佼佼者,Java架构师之路接下来会推出一系列的Docker相关技术文章,Docker技术也是架构师的必备技能。

Docker逐渐成为虚拟化技术的佼佼者,Java架构师之路接下来会推出一系列的Docker相关技术文章,Docker技术也是架构师的必备技能。

什么是Docker
Docker 是一个开源的应用容器引擎,基于Go语言,诞生于2013年初,最初发起者是dotCloud公司,开发者可以打包应用到一个轻量级、可移植的容器中,然后发布到主流Linux系统上运行。

为什么用Docker
持续交付和部署:使用Docker可以通过定制应用镜像来实现持续集成,持续交付,部署。开发人员构建后的镜像,结合持续集成系统进行集成测试,而运维人员则可以在生产环境中快速部署该镜像,也可以结合持续部署系统进行自动部署。
更高效的资源利用:Docker是基于内核级的虚拟化,可以实现更高效的性能,同时对资源的额外需求很低,相比传统虚拟机方式,相同配置的主机能够运行更多的应用。
更轻松的迁移和扩展:Docker容器几乎可以在任何平台上运行,同时支持主流的操作系统发行版本。
更快速的启动时间:传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到妙级,甚至毫秒级的启动时间,大大的节约了开发,测试,部署的时间。

Docker与传统虚拟机差异

1


2


传统虚拟化是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层,而Docker容器是在操作系统层面实现虚拟化,直接复用本地主机操作系统,更加轻量级。

核心概念
Docker镜像:类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,使用镜像可以创建容器,可以理解为镜像是容器的基石。
Docker容器:是由Docker镜像创建的运行实例,类似于轻量级的沙箱,每个容器之间都是相互隔离的。支持的操作有启动,停止,删除等。
Docker仓库:类似于经常使用的代码仓库,如github,它是Docker集中存放镜像文件的仓所,国内也有网易,阿里等镜像仓库。

镜像操作指令
获取镜像:
docker pull centos (默认获取centos最新的镜像)
docker pull centos:7 (获取指定标签镜像)
查看本地镜像:
docker images
查看镜像详细信息:
docker inspect centos:7
查看镜像历史:
docker history centos:7
删除镜像:
A:使用标签删除:docker rmi centos
B:使用ID删除:docker rimi
构建镜像:
A:使用docker commit命令
B:使用Dockerfile构建
使用docker commit
例:构建一个带有jdk的镜像
按照如下步骤操作

[root@localhost ~]# docker run -it centos:7 /bin/bash
[root@060793baf536 /]# yum install wget
[root@060793baf536 /]# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm

[root@060793baf536 /]# rpm -ivh jdk-8u131-linux-x64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8.0_131-2000:1.8.0_131-fcs  ################################# [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
[root@060793baf536 /]# exit
[root@localhost ~]# docker commit 060793baf536 centos/jdk:2.0

通过docker images命令可以看到新增了centos/jdk 标签为2.0的镜像

使用Dockerfile构建
实际使用中不推荐使用docker commit构建,应使用更灵活和强大的Dockerfile构建docker镜像,直接举例来认识Dockerfile。
例:构建一个带有jdk的centos7镜像
[root@localhost Dockerfile]# mkdir Dockerfile
[root@localhost Dockerfile]# cd Dockerfile
编写Dockerfile:

FROM centos:7
MAINTAINER  Java-Road "Java-Road@qq.com"

RUN mkdir /usr/local/jdk
COPY jdk-8u171-linux-x64.rpm /usr/local/jdk/
RUN rpm -ivh /usr/local/jdk/jdk-8u171-linux-x64.rpm

执行如下指令:

[root@localhost Dockerfile]# docker build -t centos/jdk .

运行结果如下:

3

docker images可以看到新生成的centos/jdk镜像。
容器操作指令
创建启动容器:

[root@localhost ~]# docker run centos:7 /bin/echo'hello world'
容器运行完后直接退出

交互形式创建启动容器

[root@localhost ~]# docker run -it centos:7 /bin/bash
[root@802e3623e566 /]# ps
   PID TTY          TIME CMD
     1 ?        00:00:00 bash
    13 ?        00:00:00 ps
[root@802e3623e566 /]# exit

执行exit才能退出容器

守护状态运行容器

[root@localhost ~]# docker run -d centos:7 /bin/sh -c "while true; do echo hello world; sleep 1; done"

启动已有的容器:
docker start 容器ID
例:

[root@localhost ~]# docker start 802e3623e566

停止运行的容器:
docker stop 容器ID
例:

[root@localhost ~]# docker stop 802e3623e566

删除容器:

[root@localhost ~]# docker stop 89566e38c7fb
[root@localhost ~]# docker rm 89566e38c7fb

进入运行的容器:

[root@localhost ~]# docker exec -it cbd8b1f35dcc /bin/bash

导出容器:
导出容器cbd8b1f35dcc到centos_test.tar文件

[root@localhost ~]# docker export -o centos_test.tar cbd8b1f35dcc

导出的tar文件可以在其他机器上,通过导入来重新运行

导入容器:
把导出的文件centos_test.tar通过docker import导入变成镜像

[root@localhost ~]# docker import centos_test.tar test/centos

通过docker images命令可以看到增加了个test/centos镜像
原文发布时间为:2018-06-28
本文作者:蜗牛
本文来自云栖社区合作伙伴“Java架构师之路”,了解相关信息可以关注“Java架构师之路”。


社群技术交流:欢迎关注【阿里Java技术进阶】每周在群内进行【免费技术直播】和【在线回答技术问题】欢迎点击link入群: http://tb.cn/gXRstIw
或者 钉钉扫码入群:
JAVA_

相关文章
|
6月前
|
缓存 Linux Go
一次性构建出多CPU指令集的 Docker 镜像
本文介绍了使用 Docker Buildx 构建跨平台 Docker 镜像的流程。首先确保系统为 Ubuntu 22.04,安装 Docker 和相关依赖。然后配置 Docker Buildx,编写 Go 程序和 Dockerfile。接着,创建构建脚本 `build.sh` 自动化构建并推送镜像到 Docker Hub。运行此脚本将为不同平台(如 amd64, arm64)构建并推送镜像。最后,在 Docker Hub 可查看构建结果,并可在其他系统上测试镜像。
105 3
|
5月前
|
Ubuntu C++ Docker
Docker的基本指令和HTML/PYTHON/C++的简单创建示例
Docker的基本指令和HTML/PYTHON/C++的简单创建示例
|
3月前
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?
|
3月前
|
监控 Linux API
在Docker中,docker run指令执行后,生成了哪些进程?
在Docker中,docker run指令执行后,生成了哪些进程?
|
3月前
|
安全 Ubuntu Linux
在Docker中,镜像内没有curl,kill,ipconfig等指令如何添加?
在Docker中,镜像内没有curl,kill,ipconfig等指令如何添加?
|
3月前
|
Docker 容器
docker compose logs 常用指令
`docker compose logs`命令用于查看容器的输出日志。该命令提供多种选项,如以纯文本形式输出(`--no-color`)、隐藏日志前缀(`--no-log-prefix`)、显示时间戳(`-t, --timestamps`)等。用户可以指定时间范围(如`--since "2024-08-06T13:11:10"`和`--until "2024-08-06T13:11:15"`)或最近几分钟内的日志(如`--since 5m`)。使用`-f, --follow`可实时跟踪日志输出。注意:参数-h已废弃,应使用--help。
|
6月前
|
应用服务中间件 Linux nginx
Docker Compose 安装与使用(常用指令)
Docker Compose 安装与使用(常用指令)
703 0
|
6月前
|
Java Linux 虚拟化
Docker 部署spring-boot项目(超详细 包括Docker详解、Docker常用指令整理等)
Docker 部署spring-boot项目(超详细 包括Docker详解、Docker常用指令整理等)
2198 2
|
6月前
|
Docker 容器
docker 常用指令(启动,关闭,查看运行状态)
docker 常用指令(启动,关闭,查看运行状态)
72 1
|
6月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
57 0