Docker入门命令详解(下)

简介: Docker入门命令详解(下)

五、制作Java镜像

1.下载JDK8

2.复制JDK8到主目录的software文件夹下

3.启动容器

docker run -i -t -v[逸虚凌辰7]  /software:/mnt/software centos /bin/bash


此时进入容器中,会在mnt/software中发现我们复制的JDK


解压JDK,安装到/opt目录下


tar -zxf [逸虚凌辰8] /mnt/software/jdk-8u191-linux-x64.tar.gz -C/opt


建立jdk快捷方式


ln -s [逸虚凌辰9] /opt/jdk1.8.0_191 /opt/jdk


ll /opt/jdk


验证jdk版本


/opt/jdk/bin/java -version


4.提交镜像

另外打开一个终端,查看当前容器。


CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES


583c6bbdf18e        centos              "/bin/bash"         19 minutes ago      Up 19 minutes                           optimistic_chandrasekhar


docker commit 583c6bbdf18e prim/java


然后查看镜像就会看到我们生成的镜像。


5.验证镜像

docker run --rm[逸虚凌辰10]  prim/java /opt/jdk/bin/java -version


六、使用Dokcerfile构建镜像

1. Dockerfile结构

Dockerfile是编写Docker镜像的脚本


设置基础镜像

FROM:centos:latest

FROM指令的固有格式“仓库名:标签名”

设置维护者信息

可以指定镜像由谁创建的,由谁维护的

MAINTAINER “Yang Rui”yangrui@xxx.com

设置需要添加到容器中的文件

ADD jdk-8u91-linux-x64.tar.gz /opt

ADD指令的第一个参数为宿主机的来源地址(可使用相对路径)第二个是容器的目标路径(必须为绝对路径)使用ADD命令,将自动解压来源路径中的压缩包,将解压后的文件复制到目标路径中。一般将Dockerfile文件和需要添加到容器的文件放在同一目录,有助于编写路径来源。

设置镜像制作过程中执行的命令

例如创建链接

RUN ln -s /opt/jdk1.8.0_91 /opt/jdk

如果要使用多条命令可以写多条RUN。但是可以将多条命令通过\命令换行符合并成一条,可以减少镜像的体积。原因是镜像每执行一条命令就会形成新的“镜像层”

设置容器启动时所需要执行的命令

我们使用docker run是,可以在命令的最后一段添加一个容器启动时需要执行的命令,在Dockerfile中也有对应的CMD指令。

CMD /opt/jdk/binjava -version

如果我们在docker run命令是指定了需要执行的命令,那么该命令将覆盖Dockerfile中的CMD命令。

Dockerfile中还有一个与CMD指令类似的ENTRYPOINT指令,它不能被覆盖。

CMD指令要么没有,要么只有一条。

2.使用Dockerfile构建镜像

进入到jdk所在的目录,然后构建Dockerfile文件


cd /software


touch [逸虚凌辰11] Dockerfile


vim Dockerfile


添加如下构建文件


FROM centos:latest


MAINTAINER "Yang Rui"


ADD /software/jdk-8u191-linux-x64.tar.gz /opt


RUN ln -s /opt/jdk1.8.0_91 /opt/jdk


CMD /opt/jdk/bin/java -version


然后执行构建镜像命令


docker build -t[逸虚凌辰12]  yangrui/java .[逸虚凌辰13]


使用tag命令重命名一样的镜像


docker tag e0b70251236c prim/java:1.0


一般情况下,安装完JDK后,我们需要配置JAVA_HOME和Path环境变量才能在命令中使用Java命令。在Dockerfile中我们可以使用Env指令来设置所需的环境变量。


指定JAVA_HOME和PATH


FROM centos:latest


MAINTAINER "Yang Rui"


ADD jdk-8u191-linux-x64.tar.gz /opt


RUN ln -s /opt/jdk1.8.0_91 /opt/jdk


ENV JAVA_HOME /opt/jdk


ENV PATH JAVAHOME/bin:JAVA_HOME/bin:PATH


CMD java -version


3.Dockerfile指令汇总

Dockerfile指令


描述


FROM


设置基础镜像


MAINTAINER


设置维护者信息


ADD


设置需要添加到容器中的文件(自动解压)


COPY


设置需要复制到容器中的文件(无法解压)


USER


设置运行RUN指令的用户


ENV


设置环境变量,可在RUN指令中运用这些变量


ENTRYPOINT


设置容器启动时需要运行的命令(无法覆盖)


CMD


设置容器启动时需要执行的命令(可以被覆盖)


WORKDIR


设置进入容器时的工作目录


EXPOSE


设置壳被暴露的端口号(用于端口映射)


VOLUME


设置可被挂在的数据卷(用于目录映射)


ONBUILD


设置在构建时需要自动执行的指令


七、使用DockerRegistry管理镜像

1.使用DockerHub

使用翻墙软件(蓝灯)注册dockerhub,然后登陆创建自己的Repository。


docker login


登陆dockerhub


docker push prim/java


把本地镜像上传至自己的镜像仓库


2.搭建Docker Registry

启动Dockers Registry


如果是使用的阿里云ECS,要提前在安全组开放端口50000


docker run -d[逸虚凌辰14]  -p[逸虚凌辰15]  50000:5000 -v[逸虚凌辰16]  ~/[逸虚凌辰17] docker-registry:/tmp/registry registry


此时docker ps可以查看registry已经在容器运行了。


然后,浏览器输入http://59.110.142.242:50000/v2/_catalog


如果有json返回则说明仓库搭建成功。


vim  /usr/lib/systemd/system/docker.service


    增加 ExecStart=/usr/bin/dockerd  --insecure-registry 59.110.142.242:50000


然后重启服务,加载仓库配置


systemctl daemon-reload


systemctl restart docker


重命名镜像标签


由于我们创建的镜像默认注册中心是DockerHub,使用Docker push命令推送的目的地址都是DockerHub,我们需要更改镜像的标签。添加59.110.142.242:50000/


docker tag b4401d8b4a2a 59.110.142.242:50000/prim/java


推送镜像到私有仓库


docker push 59.110.142.242:50000/prim/java


私有仓库还可以指定用户名密码,在同一局域网上可以拉取仓库的镜像。


还可以将DockerRegistry与Nginx集成将他们部署到一台稳定的服务器上,通过Nginx反响代理的方式来调用Docker Registry,并将IP绑定到一个内部域名上,比如docker-registry.xxx.com,这样局域网内部的用户可以通过该域名访问DockerRegistry。


八、Tips

1. 调整Docker内存限制

docker stats


使用-m指定内存大小


docker run -d -p 8080:8010 -m 512m 172.0.0.1:5000/demoe.msa/msa-api-hello:1.0.0


[逸虚凌辰1]Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。


tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件


使用指令"tee"将用户输入的数据同时保存到文件"file1"和"file2"中,输入如下命令


$ tee file1 file2


[逸虚凌辰2]表示启动容器后,打开标准收入设备,可使用键盘进行输入。开启了input(输入)功能


[逸虚凌辰3]表示启动容器后,分配一个伪终端TTY,将与服务器建立一个会话。


[逸虚凌辰4]表示将要运行的镜像名称


[逸虚凌辰5]表示运行容器中的bash应用程序,进入到系统中


[逸虚凌辰6]以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等。



[逸虚凌辰7]把宿主的磁盘挂载到容器中,可以理解为目录映射。



[逸虚凌辰8]-c :建立一个压缩文件的参数指令(create 的意思);


-x :解开一个压缩文件的参数指令!


-t :查看 tarfile 里面的文件!


特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!


因为不可能同时压缩与解压缩。


-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?


-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?


-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!


-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!


  例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成


  『 tar -zcvPf tfile sfile』才对喔!


-p :使用原文件的原来属性(属性不会依据使用者而变)


-P :可以使用绝对路径来压缩!


-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!


--exclude FILE:在压缩的过程中,不要将 FILE 打包!


[逸虚凌辰9]为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件


[逸虚凌辰10]表示容器退出时可自动删除容器,也就是说在执行完我们的查看版本命令后容器自动退出。


[逸虚凌辰11]如果fileA存在,使用touch指令可更改这个文件或目录的日期时间,包括存取时间和更改时间;

如果fileA不存在,touch指令会在当前目录下新建一个空白文件fileA。

touch 命令详解

功能说明:改变文件或目录时间。


语 法:touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间>][--help] [--version][文件或目录...] 或 touch [-acfm][--help][--version][日期时间][文件或目录...]


补充说明:使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间。


参 数:

-a或--time=atime或--time=access或--time=use 只更改存取时间。

-c或--no-create 不建立任何文件。

-d<时间日期> 使用指定的日期时间,而非现在的时间。

-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。

-m或--time=mtime或--time=modify 只更改变动时间。

-r<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同。

-t<日期时间> 使用指定的日期时间,而非现在的时间。

--help 在线帮助。

--version 显示版本信息


[逸虚凌辰12]指定构建镜像的名字


[逸虚凌辰13]表示当前目录


[逸虚凌辰14]表示将在后台启动该容器。


[逸虚凌辰15]表示对容器中暴露的端口进行端口映射,冒号左边为宿主机端口,右边为容器内部需要暴露的端口

[逸虚凌辰16]挂在本地磁盘到容器磁盘

[逸虚凌辰17]表示当前目录

目录
相关文章
|
2月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
121 2
|
26天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
153 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
232 77
|
3天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
41 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
25天前
|
Ubuntu 应用服务中间件 nginx
docker入门-快速学会docker
本文介绍了Docker的基本概念,包括镜像、容器、tar文件、Dockerfile和仓库,并通过实际操作演示了如何使用Docker。从拉取Nginx镜像、运行容器、修改容器内容、保存容器为新镜像,到使用Dockerfile构建自定义镜像,最后讲解了如何保存和恢复镜像。文中还推荐了一个在线实践平台Play with Docker,方便读者快速上手Docker。
88 5
docker入门-快速学会docker
|
30天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
99 24
|
2月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
1442 12
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
1月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
133 6
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
2月前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践