Docker新手上路

容器的基本概念

容器技术是目前比较流行的一种服务器中的资源共享方式。目前的容器一般用于把特定应用所需要的运行环境或者特定的系统环境打包。在传统的虚拟化技术中,在计算机的物理架构上层有一层虚拟机监视器,其把物理资源转换为虚拟资源,然后虚拟机再使用这些虚拟资源创建操作系统,应用再运行在这些操作系统上。而实际上,有很多应用都是共用一些底层的系统文件的,传统的虚拟化技术中,需要为每一个应用程序创建一个操作系统,这样实际上是严重浪费了物理资源。而在容器技术中,在主机中安装容器的运行环境,不同容器都包括自己的一些库以及应用程序,但是它们共用宿主机的操作系统,然后不同应用再使用命名空间等手段实现隔离。

容器运行的时候基于容器镜像,实际上其是运行容器所需要的所有文件的集合。其类似于一个应用程序的安装包。容器镜像实际上是按层来进行堆叠的,大部分的容器镜像都是基于其他的镜像的,例如在Ubuntu的基础镜像上构建一个装有Apache的容器镜像。

所有的镜像都是只读的,只有当把镜像运行为一个容器的时候,它才能够可写。这样做的好处之一是,如果我们需要拉取两个镜像,这两个镜像分别包括CentOS,Apache,Redis以及CentOS,Nginx,MySQL,这个时候我们只需要拉取一个CentOS镜像,而不需要把整个镜像重新拉取。这样就能够节省储存空间以及拉取时候的时间或者带宽。

Docker镜像的构建

我们也可以自己构建Docker镜像。构建Docker镜像的方法有两种,其中一种是通过正在运行的容器,把其打包为一个镜像;而另外一种方式则是通过Dockerfile来构建容器镜像。

使用docker commit创建镜像

通过正在运行的容器来构建镜像的方法是使用命令docker commit

首先我们拉取一个Nginx镜像

然后就可以使用docker images来查看目前已经下载的镜像
通过docker create来创建一个停止的容器
docker ps -a查看所有容器(包括停止中的容器),而docker ps则是查看运行中的容器
然后就可以用docker start来启动容器了

在这之后,通过docker commit就能把运行中的容器制作成一个容器镜像了

然后docker images也会有一个新的镜像。

由于在docker commit的时候没有设置参数,因此这里的名称和tag都会显示none。如果需要设置的话,可以通过在docker commit的时候添加一些参数来实现。

使用docker build以及Dockerfile来创建容器镜像

优势:具有可重复性,透明性以及幂等性。

Dockerfile常用指令有几种,包括RUN,FROM等,例如要从CentOS构建一个Tomcat的镜像方法如下:

FROM centos
LABEL author=Visu
# ADD的作用把压缩包加到镜像中会自动解压缩
ADD apache-tomcat-9.0.59.tar.gz /usr/local  
ADD OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz /usr/local
# COPY没有解压功能
COPY a.txt /usr/local  
ENV mypath /usr/local
# 进入时的目录
WORKDIR $mypath  
# 暴露端口
EXPOSE 8080  
ENV JAVA_HOME /usr/local/jdk8u322-b06
# 添加JAVA以及TOMCAT的一些环境变量
ENV CLASSPATH \$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar  
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.59
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.59
ENV PATH \$PATH:\$JAVA_HOME/bin:\$CATALINA_HOME/lib:\$CATALINA_HOME/bin
# 启动时自动运行Tomcat并且打印日志
CMD /usr/local/apache-tomcat-9.0.59/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.59/logs/catalina.out  
# 以上文字有格式上的问题,如果使用右上角的复制会出错(和mathjax插件有关),但是我懒得改了,就这样吧(

随后就可以使用docker build来构建镜像了

docker build -t tomcat-test:0.1 ./
然后再使用docker images就能看见 刚刚创建的镜像了

随后通过使用docker run tomcat-test:0.1运行容器,然后在另外一个终端中通过docker inspect查看容器的ip,然后再使用curl就能看见Tomcat中的内容了。

其他有关Dockerfile的文件可参考Dockerfile reference | Docker Documentation

其他和Docker相关的命令

docker pull:用于拉取镜像,如docker pull nginx
docker ps:用于查看所有运行中的容器
docker ps -a:用于查看所有的容器(包括已停止的)
docker run:运行一个已经停止的容器
docker stop:停止一个正在运行的容器
docker exec:进入容器(在进入后退出,不会导致容器的停止)
docker attach:进入容器,退出时容器停止
docker export/import:把容器导出到本地/把容器快照文件导入为镜像

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇