热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

docker的介绍及简单使用

本篇内容介绍了“docker的介绍及简单使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何

本篇内容介绍了“docker的介绍及简单使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.docker是什么?

docker是一个提供应用打包部署运行应用的容器化平台。

应用程序 -> docker引擎-> 物理硬件

应用程序不再直接面向底层资源,而是面向中间层docker引擎来操作。

docker引擎包含:docker服务端, rest api ,docker客户端。

通过这种结构,用户可以通过客户端很方便的管理多个服务端。

2.容器与镜像

  • 镜像:镜像是只读文件,提供运行程序完整的软硬件资源。

  • 容器:容器是镜像的实例,由docker负责创建,容器之间彼此隔离。

3. docker执行流程

docker pull redis

客户端 --> Docker Daemon 检查redis镜像,若本地不存在-> 从远程中央仓库获取镜像

docker run redis

客户端->Docker Daemon redis镜像存在->创建容器,由redis对外暴露服务,对内容器就是一个完整的centos系统。

4.常用命令

  • docker pull 镜像名<:tags> - 从远程仓库抽取镜像

  • docker images - 查看本地下载的镜像

  • docker run 镜像名<:tags> - 创建容器,启动应用

  • docker ps - 查看正在运行的镜像

  • docker rm <-f> 容器id - 删除容器

  • docker rmi <-f> 镜像名:<:tags> - 删除镜像

5. 快速部署tomcat

docker run -p 8000:8080 -d tomcat:latest
# 在容器中部署最近版本的tomcat   hub.docker.com
# 端口映射-p 8000:8080  8000为宿主机端口,8080为tomcat端口
# -d 后台运行

6. 容器内部结构

以tomcat容器为例: 包含tomcat, jdk, mini版linux系统

7.在容器中执行命令

docker exec -it【交互式方式执行命令】容器id/容器name 命令

docker exec -it cc0ebcaaef7a /bin/bash 进入容器bash

8.编写Dockerfile

FROM tomcat:latest
MAINTAINER yz.com
WORKDIR /usr/local/tomcat/webapps
ADD docker-web ./docker-web
# 在Dockerfile目录下执行打包
docker build -t yz.com/mywebapp.0.1 .
# 运行容器
docker run -p 8001:8080 yz.com/mywebapp.0.1
# 访问 http://localhost:8001/docker-web/index.html
FROM java:8
MAINTAINER yz.com
WORKDIR /usr/local/apps/jars
ADD xx.jar ./xx.jar
ENTRYPOINT ["nohup","java","-jar","xx.jar","&"]

9.镜像分层

Sending build context to Docker daemon  3.584kB
Step 1/4 : FROM tomcat:latest
 ---> 2ae23eb477aa
Step 2/4 : MAINTAINER yz.com
 ---> Using cache
 ---> b0efa3602df6
Step 3/4 : WORKDIR /usr/local/tomcat/webapps
 ---> Using cache
 ---> bf93f5630ca1
Step 4/4 : ADD docker-web ./docker-web
 ---> Using cache
 ---> 603504ab383f
Successfully built 603504ab383f
Successfully tagged dmall.com/inventory-app:0.2

每一个步骤都会产生一个临时的镜像, ---> Using cache 代表会使用之前执行过的步骤缓存。

10.Dockerfile基础命令

FROM centos  # 制作基准镜像(基于centos)
FROM scratch # 不依赖任何镜像
# 尽量使用官方的Base Image
	
MAINTAINER yz.com
LABEL version = "1.0"
LABEL description = "镜像描述"

WORKDIR /usr/local/xx  # 工作路径,尽量使用绝对路径,会自动创建目录,并cd到当前目录

ADD xx.jar ./     #复制xx.jar文件到 工作路径
ADD test.tar.gz / #添加到根目录并解压
	
ENV JAVA_HOME /usr/local/java8  # 设置环境常量

11. Dockerfile运行指令

# 不同的执行时机。
RUN xx              #在build 构建时执行命令
ENTRYPOINT xx       #容器启动时执行命令
CMD xx              #容器启动后执行默认的命令或参数
11.1 RUN - 构建时运行
RUN yum install -y vim            #shell 命令格式
RUN ["yum","install","-y","vim"]  #Exec 命令格式
  • Shell 运行方式

使用shell执行时,当前shell是父进程,生成一个子shell进程, 在子shell中执行脚本。

脚本执行完毕,退出子shell,回到当前shell。

  • Exec 运行方式

使用Exec方式,会用Exec进程替换当前进程,并且保持pid不变。

执行完毕,直接退出,并不会退回之前的进程环境。

11.2 ENTRYPOINT - 启动命令
  • ENTRYPOINT(入口点)用于在容器启动时执行命令。

  • Dockerfile中只有最后一个ENTRYPOINT会被执行。

  • 推荐使用 exec格式

  • ENTRYPOINT一定会执行。

11.3 CMD - 默认执行命令
  • CMD用于设置默认执行的命令

  • 如果Dockerfile中出现多个CMD,则只有最后一个被执行。

  • 如容器启动时附加指令,则CMD被忽略。

  • 推荐使用Exec格式执行命令

  • CMD不一定会被执行,如docker run yz.com/test_cmd:0.1 ls 后面跟一个命令之后,会替换cmd命令。

12. docker自定义构建redis镜像

# 下载redis 源码
wget http://download.redis.io/releases/redis-5.0.9.tar.gz

编写Dockerfile文件

FROM centos
RUN ["yum", "install", "-y", "gcc", "gcc-c++", "net-tools", "make"]
WORKDIR /usr/local
ADD redis-5.0.9.tar.gz ./
WORKDIR /usr/local/redis-5.0.9/src
RUN make && make install
WORKDIR /usr/local/redis-5.0.9/
ADD redis-6379.conf ./
EXPOSE 6379
CMD ["redis-server", "redis-6379.conf"]
# 构建redis镜像
docker build -t xx.com/redis-6379 ./

# 运行redis容器
docker run -p 6379:6379 xx.com/redis-6379

# 启动关闭容器
docker start containerId
docker stop containerId

13. docker间的通信

因为容器每次启动都会分配新的ip,那么怎么在容器间有效的通信呢?

13.1 单向通信
# 创建redis 6379
docker run -p 6379:6379 -d --name redis6379 redis

# 创建centos link redis6379
docker run --name centos --link redis6379 -it centos /bin/bash

# 测试能够顺利ping通
ping redis6379
64 bytes from redis6379 (172.17.0.4): icmp_seq=1 ttl=64 time=0.061 ms
13.2 基于Bridge的双向通信
# 查看docker网络
docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
6b60f6c242a3        bridge              bridge              local
b51d649d7adb        host                host                local
6c0f31888ef7        none                null                local

# 创建新的网桥
docker network create -d bridge my-bridge

# 查看网络
docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
6b60f6c242a3        bridge              bridge              local
b51d649d7adb        host                host                local
68aa95b088c3        my-bridge           bridge              local
6c0f31888ef7        none                null                local

# 新开两个centos容器
docker run -dit --name os1 centos
docker run -dit --name os2 centos

# 绑定到my-bridge
docker network connect my-bridge os1
docker network connect my-bridge os2

# 进入os1 ping os2
docker exec -it os1 bash

ping os2
PING os2 (172.18.0.3) 56(84) bytes of data.
64 bytes from os2.my-bridge (172.18.0.3): icmp_seq=1 ttl=64 time=0.032 ms

# 进入os2 ping os1
ping os1
PING os1 (172.18.0.2) 56(84) bytes of data.
64 bytes from os1.my-bridge (172.18.0.2): icmp_seq=1 ttl=64 time=0.032 ms

14. 容器间的数据共享

宿主机挂载一个卷, 多个容器共享同一个卷的数据。

# 通过-v挂载宿主机目录
docker run --name os3 -dit -v /root:/mnt/root centos bash

docker exec -it os3 bash
ls /mnt/root
# 创建共享容器
docker create --name webapp -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat /bin/true

# 共享容器挂载点
docker run --volumes-from webapp --name tomcat2 -p 18002:8080 -d tomcat

# 访问宿主机18002端口,发现生效

利用这个特性可以将宿主机上面的静态资源如页面文件,共享给容器的资源目录

“docker的介绍及简单使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程笔记网站,小编将为大家输出更多高质量的实用文章!


推荐阅读
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • springboot启动不了_Spring Boot + MyBatis 多模块搭建教程
    作者:枫本非凡来源:www.cnblogs.comorzlinp9717399.html一、前言1、创建父工程最近公司项目准备开始重构,框 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 浅析Mysql数据回滚错误的解决方法_PHP教程:MYSQL的事务处理主要有两种方法。1、用begin,rollback,commit来实现begin开始一个事务rollback事 ... [详细]
  • 1.利用node实现页面实时更新,主要 ... [详细]
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
author-avatar
忧愁幻想_824
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有