Docker的安装和使用及dockerfile简单使用

一、简介
Docker是一个基于go语言的开源的应用容器引擎,可以将开发者的应用及依赖包打包到一个可移植容器当中,然后发布到任何流行的Linux机器中,可以极大的减少开发人员的工作量,Docker也可以实现虚拟化
二、Docker安装
前提:
Docker自发布以来就变得非常火爆,目前Linux系统、windows系统和mac系统都支持docker,本文以Linux系统介绍Docker的安装及简单使用。
Docker的发布时间也没有多长时间,因此Linux对Docker的支持也有限制,仅支持64位,目前centos7已经支持docker,安装要求系统为64位,内核版本为3.10以上,对于centos6,安装要求需centos6.5或更高版本,同样系统为64位,docker仅支持64位,同时内核版本为2.6.32-431 或者更高版本。
可以使用uname -a 查询内核版本

博主的内核版本为3.10.0-862,为方便使用,安装的是centos7系统,如果是centos6还需要升级内核版本,稍显麻烦
Docker安装:
Docker有两个版本,Docker-ee和Docker-ce
Docker-ce是社区免费版,Docker-ee为企业版,需要收费,本文安装的为Docker-ce社区免费版
安装之前安装相应所需包依赖

登录后复制

yum -y install yum-utils device-mapper-persistent-data lvm2


下载docker-ce的yum源到/etc/yum.repos.d/下

登录后复制

wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


yum安装docker-ce

docker安装完成,启动docker,查看docker版本信息

登录后复制

systemctl start docker


Docker安装成功
三、Docker使用
首先从最简单的hello-world开始
运行一个hello-world容器,本地最初没有hello-world镜像,会自动从远端docker hub拉取

登录后复制

docker run hello-world


使用docker images命令可查询当前本地主机上的镜像,我的机器上原来有拉取其它镜像会有点多,看到有hello-world镜像即为ok

登录后复制

docker images


删除镜像使用以下命令

登录后复制

docker rmi imagename<imageid>


删除成功
从远端docker hub拉取镜像

登录后复制

docker pull imagename<imageid>


查看本地镜像列表,拉取成功

拉取之前可以查询docker hub可拉取镜像列表

登录后复制

docker search imagename


第一个字段为imagename(镜像名字),第四个字段为official,是否为官方镜像,个人也可以把自己制作的镜像放到docker hub上,找到自己想要下载的镜像名字就可以拉取了。
运行一个新的container

登录后复制

docker run [-i -t -d -p -P -c] [--name]:在容器内运行一个应用程序-t :在新容器内指定一个伪终端或终端-i:允许你对容器内的标准输入进行交互-d:以进程方式运行容器,让容器在后台运行-p:设置端口-P:将容器内部使用的网络端口映射到我们使用的主机,就是让我们访问我们使用的主机就等同于访问到容器内部-c:command,后面接命令--name container name:指定容器名字

运行一个新的container并调用打印命令

登录后复制

docker run ubuntu:15.10 /bin/echo "Hello world"


运行一个交互式的container(容器)

登录后复制

docker run -it ubuntu:15.10 /bin/bash


可以发现已经进入到容器当中,退出使用exitctl+d
从远程docker hub拉取一个镜像

在后台运行一个新的container

登录后复制

docker run -P --name test1 -d training/webapp python app.py


查看当前运行容器详情

登录后复制

docker ps


查看容器端口

登录后复制

docker port containername<containerid>


可以看到容器test1的端口映射到了本机的32768,可以访问本机ip的32768端口来查看

查看容器日志

登录后复制

docker logs containername<containerid>


停止指定容器

登录后复制

docker stop containername<containerid>


再次运行该容器就可以使用

登录后复制

docker start containername<containerid>


查看指定容器内部运行进程

登录后复制

docker top containername<containerid>


查看历史启动的容器

登录后复制

docker ps -a


删除容器,容器必须处于停止状态

登录后复制

docker rm containername<containerid>


其它命令
为镜像添加新的标签

登录后复制

docker tag

查询容器ip

登录后复制

docker inspect containername<containerid>

提交容器副本

登录后复制

docker commit [-m -a] container-id image-name
-m:提交的描述信息
-a:指定镜像作者
container-id:容器ID
image-name:你要命名的镜像名

先写这么多,后续补充
补充:
前边有提到可以将自己的本地镜像上传到docker hub上,那么如何生成自己的镜像呢?docker提供一种docker file的方式来生成本地镜像,你也可以通过docker file的方式把你的项目打包成镜像来使用。
四、Dockerfile部分命令
首先,每个指令的前缀必须大写

登录后复制

登录后复制

FROM 指定基础镜像,后可跟镜像名字或镜像id
例:FROM centos:6.0

登录后复制

MAINTAINER 作者   指定作者
例:MAINTAINER root

登录后复制

ADD 把文件复制到到容器的指定目录,如果是tar包会自动解压,后可跟本地文件或url,如果是url,功能类似于wget
例:ADD nginx-1.9.3.tar.gz /usr/local

登录后复制

RUN 告诉docker要在镜像内执行的命令,后可跟shell命令或普通命令
例:1.RUN useradd test   2.RUN /bin/echo "hello test"

登录后复制

CMD 容器启动时要运行的命令
例:1.CMD ["nginx"]  2.CMD ["service mysqld start"]

登录后复制

RUN & CMD 区别:
RUN是构建容器时就运行的命令以及提交运行结果,即执行 docker build时运行,一个dockerfile可以有多个
CMD是容器启动时执行的命令,即执行 docker run时运行,一个dockerfile只有1个

登录后复制

LABEL为镜像指定标签
例:LABEL version="1.0"

登录后复制

EXPOSE 将容器的监听端口暴露给外部,这样才能使主机和container建立映射,即在dokcer run使指定-p端口映射
关系
例:EXPOSE 80

登录后复制

ENV  设置环境变量
例:ENV PATH /usr/local/nginx/sbin:$PATH

登录后复制

VOLUME 可实现挂载功能,可以将内地文件夹或者其他容器中的文件夹挂在到这个容器中,容器使用的是AUFS,
这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。所以当数据需要持久化时用这个命令。
例:VOLUME /usr/local/nginx/conf/nginx.conf /etc/nginx/nginx.conf
将主机上的/usr/local/nginx/conf/nginx.conf文件挂在到容器的/etc/nginx/nginx.conf文件

登录后复制

copy 与add类似,区别为copy后只能跟本地目录

登录后复制

workdir 设置工作目录,类似于linux的cd命令

登录后复制

user 设置启动容器的用户    1.USER daemon  2.USER UID

登录后复制

stopsignal  当容器退出时给系统发送什么样的指令

dockerfile命令其实有好多和linux系统本身命令的功能相似,还是相对比较好理解,为方便理解,博主做了一个关于将nginx服务打包成镜像并使用的一个例子。
首先我们需要把我们的要用到的nginx安装包和dockerfile放在同一目录下

创建Dockerfile文件,其实就是把nginx的安装过程写成了脚本,只不过要符合dockerfile的规范。

登录后复制

FROM    centos:6.7       ---基础镜像centos6.7
MAINTAINER      test    ----dockerfile作者,testADD     nginx-1.6.2.tar.gz /usr/local/src  ----解压nginx安装包到container的/usr/local/src中
RUN     yum -y install wget gcc gcc-c++ make openssl-devel pcre-devel    ---在容器内要执行的命令,安装包依赖
RUN     useradd -s /sbin/nologin nginx    --------在容器内要执行的命令,新增nginx用户
WORKDIR /usr/local/src/nginx-1.6.2  ------------container内跳转目录到/usr/local/src/nginx-1.6.2
RUN     ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
--with-http_stub_status_module && make && make install   ------ 在容器内要执行的命令,源码安装nginx
RUN     echo "daemon off;">>/usr/local/nginx/conf/nginx.conf     ------在容器内要执行的命令,设置nginx前台运行
ENV     PATH /usr/local/nginx/sbin:$PATH   ---- ---设置环境变量
EXPOSE  80     --------------------------------------------设置映射端口
CMD     ["nginx"]    ---------------------------------------容器启动时要执行的命令


构建镜像操作

登录后复制

docker build

执行

登录后复制

docker build -t nginx:1.6 .
-t      ---------指定镜像名和标签

请注意,最后面有一个点 ‘.’,指定dockerfile的路径,也可以写为绝对路径

执行成功会出现

查看本地镜像可以看到我们构建的镜像

运行我们构建的镜像,映射到本地的80端口

查看本地端口80

访问本地80端口,成功

Docker的安装和使用及dockerfile简单使用相关推荐

  1. 在docker上安装部署tomcat项目 超简单,拿来主义

    在docker中部署tomcat,非常简单,而且省去了手动安装jdk等步骤,只需要将war包复制在容器tomcat实例中的webapps下面即可.以下将详细讲解流程: 在windows中打好包以后用w ...

  2. docker安装kong和konga并简单使用

    docker下安装kong和konga以及简单使用 kong是什么 Kong是可扩展的开源 API层 (也称为API网关或API中间件).Kong在任何RESTful API之前运行,并通过Plugi ...

  3. Centos7安装OpenResty以及整合Lua简单的使用

    目录 一.什么是OpenResty 二.OpenResty安装 传统方式安装 Docker方式安装 三.结合lua简单使用 1.输出helloword 2.限流 一.什么是OpenResty Open ...

  4. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  5. Docker 安装、镜像、dockerfile、容器、仓库

    2018-05-30 参考: 1.<docker从入门到实战> 2.菜鸟教程http://www.runoob.com/docker/docker-command-manual.html. ...

  6. docker下安装typecho建立自己得博客系统(1)dockerfile篇

    需求说明 使用typeecho一款php软件在docker环境下构建运行自己得博客系统,并安装ssl证书. 博客软件typecho http://typecho.org/ Step1:拥有一台包含do ...

  7. Docker容器安装最快最简单__编程小黑马

    Dodcker 安装 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest ...

  8. [2020.11.4亲测有效] 手把手教你在Ubuntu 20.04上通过docker安装微信和QQ - 最简单有效的方法

    前言 (๑•̀ㅂ•́)و✧ Ubuntu上的微信和QQ一直很难装,我之前尝试了很多方法(有些是基于网页版登录微信的,有些是用wine的),但我试了都不太行,坑点很多,搞不好就把系统搞崩了.今天发现用d ...

  9. Ubuntu 非常简单安装 docker 脚本安装

    内核版本检查 uname -a 检查 Device Mapper DeviceMapper自Linux 2.6被引入成为了Linux最重要的一个技术.它在内核中支持逻辑卷管理的通用设备映射机制,它为实 ...

最新文章

  1. 如何编写更好的SQL查询:终极指南-第二部分
  2. t-sql判断一个字符串是否为bigint的函数(全角数字需要判断为不合格)
  3. Django 1.6 部署
  4. linux项目运行日志查看,Linux项目部署、后台启动和终止运行及查看日志信息_MQ...
  5. 修完 1300 万行代码,我帮苹果省下 2 亿美元,但没拿到承诺的千万股票
  6. pymysql.err.InternalError: (1130, Host '127.0.0.1' is not allowed to connect to this MySQL server)
  7. 关于以追加模式写入文件时,为什么第一行是空行?
  8. mongodb一致性协议_mongo的怎么保持事物的一致性-问答-阿里云开发者社区-阿里云...
  9. 【转】聊聊分布式事务,再说说解决方案
  10. Linux中nginx安装基础教程
  11. 宿主程序Crash与Lua是动态库还是静态库有关?
  12. svg html转换器,html – 将嵌入的SVG转换为PNG到位
  13. 2. java压缩tar文件
  14. 42招健脑秘笈——必看
  15. 绝地求生 Win10 崩溃解决办法 (提示cmd.exe应用程序错误0xc000124)
  16. 高斯消去法与列主元消去法
  17. 响铃:暴跌后仅有8倍PE,趣店为何还在跌跌不休?
  18. vue IE下验证码无法显示解决方法
  19. Altium Designer 原理图如何统计Pins数目
  20. 你见过哪些令你瞠目结舌的Python代码技巧?

热门文章

  1. 产品运营必须知道的几个概念,什么是跳出率和退出率?
  2. hadoop2.2.0安装,完全分布式安装
  3. capcreatecapturewindowa 说明_家长不批改作业,还需要写情况说明?
  4. 【Android-tips】 Unable to execute dex: Multiple dex files define 解决方法
  5. Lucene 中的Tokenizer, TokenFilter学习
  6. How to Map Distinct Value Types Using Java Generics--reference
  7. Java 编程的动态性,第 8 部分: 用代码生成取代反射--转载
  8. 《高性能网站构建实战》 目录--转
  9. 【科技金融】互联网金融简介
  10. 【采用】【风险管理】(第三篇)风险管理报表体系