01docker入门

传统的产品的开发和发布过程中,开发人员在本机测试通过的产品,一般打成war包或者jar包交付给运维人员进行部署上线,但是由于双方的环境和配置存在差异,特别是版本迭代之后,不同版本环境的兼容等问题,往往产品在部署后无法正常运行甚至部署不成功。docker对这一系列问题提供了标准的解决方案。即是运维人员不是安装单纯的软件,而是带上原始的环境,包括代码、配置、数据、系统等,把原始环境一模一样的复制过来,从而消除了开发人员“在我的电脑上能正常工作,在你那不行”的问题。

1、docker概述

docker的三大要素:
镜像(image)、容器(container)、仓库(repository)
镜像是一个只读的模板,镜像可以用来创建docker容器,一个镜像可以创建多个容器,类比来说,镜像类型与java的类,容器相当于通过类创建的对象实例;
docker利用容器一个或一组应用,他可以被启动,停止,删除,每个容器相互隔离,互不影响;可以把容器看做是一个简易版的linux环境和运行在其中的应用程序;仓库是存放镜像的地方,仓库和仓库注册服务器是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库包含多个镜像,每个镜像有不同的标签(tag),仓库分为公开仓库和私有仓库,公开仓库最大的为官网的仓库,国内的公开仓库包括阿里云,网易云等。

1.1、docker包含两方面的技术

1镜像技术
打破代码即应用的观念,从系统环境开始,自底至上打包应用,类似于jvm一次构建,处处运行。
在这里插入图片描述
在这里插入图片描述

1.2、虚拟机vm与docker的区别

虚拟机是带环境安装的,连硬件也模拟了,存在占用资源多、冗余步骤多、启动慢等。后来的linux container 技术在此基础上做了减法,保存了公共使用的部分资源,容器内的应用进程直接运行与宿主内核,同时也不需要进行硬件虚拟,并且每个容器之间相互隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。可以这样说,docker是精简版,压缩版的linux系统,其仅包含了操作系统的内核等必须的文件。

2、docker安装

前提:很重要,docker支持centos6.5或更高版本,在centos6.5上,要求系统为64位,系统内核版本为3.6.32-431及更高版本,centos7上要求系统64位,系统内核版本3.10以上。
在centos上查看系统的内核版本命令:

uname -r

在这里插入图片描述
以下为centos7的安装步骤,只有7以上的版本才支持社区版
1、卸载老版本

yum rm docker

2、安装yum工具

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

在这里插入图片描述

3、
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按照上述步骤执行完命令就安装成功了

3、阿里云镜像加速

在这里插入图片描述

在这里插入图片描述
细节自行百度

4、docker命令

帮助命令

docker --help

镜像命令
1显示本地存在的镜像

docker images

2在仓库中查找镜像

docker search xxx

3拉取xxx镜像的yyy版本,省略yyy表示拉取最新版本,一般不使用

 docker pull xxx:yyy

4删除镜像,以镜像名或者image ID删除

docker rmi xxx/yyy
强制删除加 -f参数
同时还可以删除多个镜像,镜像之间用空格隔开

容器命令
1新建并启动容器

docker run [OPTIONS]  IMAGE [CAMMAND] [ARGS]
最常用的例如,假设有了镜像tomcat
docker run  -d -p 8080:8080 --name tomcat8080 [-v /usr/local/tomcat8080/webapps:/usr/local/tomcat/webapps] tomcat
-i以交互模式运行容器,通常与-t搭配使用
-t为容器分配一个伪终端
-d 后台启动
-p端口映射
-P随机端口映射
-v 文件挂载
--name 给容器取名字叫做tomcat8080
但是加了-v参数,浏览器无法访问,目前还没解决

2查看启动的容器

docker ps 
-a 正在运行的容器和历史上运行过的
-l 显示最近创建的容器
-n n 显示最近创建的n个容器
-q静默模式,只显示编号
--no-trunc 不截断输出

3退出容器

exit 容器停止并退出
ctrl+P+Q 容器不停止退出

4启动容器

docker start 容器id或者容器名

5重新启动容器

docker restart 容器id或者容器名

6停止容器

让容器走正常流程关闭
docker stop 容器id或者容器名

强制停止容器
docker kill 容器id或者容器名

7删除已停止的容器

docker rm 容器id或者容器名
-f  强制删除

8查看容器日志

docker logs -f -t --tail 容器ID
-t 加入时间戳
-f 跟随最新的日志打印
--tail n 显示最后n条

9查看容器内运行的进程

docker top 容器ID

10查看容器内部细节

docker inspect 容器ID

11进入容器

首先得进入容器,再执行其他操作
docker attach 容器ID
例如:先执行docker attach aaa
			再执行ls -l /tmp


直接在宿主机内执行容器内的命令,并返回结果
docker exec  -t 容器ID 容器内命令
例如:docker exec  -t  aaa ls -l /tmp
二者结果一样,但后者依然在宿主机内,没有进入容器内部

docker exec  -t 容器ID /bin/bash 也可以进入容器
exec 功能比attach强大,建议使用exec

12容器内拷贝文件到宿主机上

docker cp 容器ID:容器内路径 目的主机路径
5、docker镜像

镜像原理
    镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码,运行时,库,环境变量和配置文件。
    unionFS(联合文件系统)是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同的目录挂载到同一个虚拟文件系统下,Union文件系统是docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。特性:一次同时加载多个文件系统,但从外面看,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
正是因为这样,在docker中下载tomcat镜像时不需要单独安装jdk,原因是虽然docker最外层只给我们暴露了tomcat,但是其把其需要的其他文件自动给我们安装好了。
    docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作容器层,容器层之下的都叫做镜像层。
docker镜像commit操作
    docker commit提交容器副本使之成为新的镜像,命令:docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名];例如
docker commit -a=“francie” -m=“my test image” b77088fe0fe3 francis/tomcat:1.0。注意francis/tomcat:1.0是规范的写法,前面带的francis部分为命名空间,类似于java的包名,tomcat:1.0为类名。
目前这个操作镜像只能发布到本地,发布到阿里云请看第9节。

6、docker容器数据卷

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器中,但不属于联合文件系统,因此能绕过联合文件系统提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在删除容器时删除其挂载的数据卷。
特点:
1、数据卷可在容器之间共享或重用数据
2、卷中的修改可以直接生效,
3、数据卷中的修改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止
数据卷的添加
1、直接命令添加

docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名;例如:
docker run -it -v /myDataVolume:/dataVolumeContainer b77088fe0fe3 
挂载目录之后,容器重启后,宿主机修改的内容会被完全同步。如果想要容器内目录只读,可通过加:ro来设置。例如
docker run -it -v /myDataVolume:/dataVolumeContainer :ro b77088fe0fe3 

容器间还可以实现多数据卷挂载和容器间继承实现数据卷共享,实验有点不好做,需要的时候百度。
总结:1、编写一个dockerfile文件
2、有了dockerfile文件后,docker build命令执行,获得自定义镜像
3、run 这个自定义镜像

7、dockerFile解析

dockerfile是是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本。
构建三步走:
1、编写一个dockerfile文件
2、有了dockerfile文件后,docker build命令执行,获得自定义镜像
3、run 这个自定义镜像

dockerfile基础知识
1、每条保留字指令都必须大写且后面至少要跟随一个参数
2、指令按照从上到下的顺序执行
3、#号是注释符号
4、每条指令都会创建一个新的镜像层,并对镜像进行提交。
docker执行dockerfile的大致过程
1、docker从基础镜像运行一个容器
2、执行一条指令并对容器进行修改
3、执行类似docker commit的操作提交一个新的镜像层
4、执行dockerfile中的下一条指令直到所有的指令都执行完成
dockerfile体系结构
FROM 基础镜像,当前镜像是基于哪个镜像的
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令
EXPOSE 当前容器对外暴露的端口
WORKDIR 指定在创建容器后,终端默认登录的工作目录
ENV 用来在构建镜像过程中设置环境变量
ADD 拷贝并解压缩
COPY 拷贝
VOLUME 容器数据卷,用于数据保存和持久化工作
CMD 指定一个容器启动时要执行的命令,dockerfile可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT 也是启动容器时要执行的命令,不同之处在于docker run之后的参数不会覆盖,而是追加
ONBUILD 当构建一个被继承的dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发。

8、docker常用安装

总体步骤:
搜索镜像–>拉取镜像–>查看镜像–>启动镜像–>停止容器–>移除容器–>删除镜像

tomcat
mysql

docker run -d --name mysql5.7 -p 3306:3306
 -v /root/mysql/conf:/etc/mysql/conf.d
  -v /root/mysql/logs:/logs
   -v /root/mysql/data:/var/lib/mysql
    -e MYSQL_ROOT_PASSWORD=root 3473143edd4d

用数据库连接工具测试mysql,成功
redis

docker run -d -p 6379:6379 -v /root/redis/data:/data
 -v /root/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf 
 7359b9f8c54e
 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

在本机输入命令 docker exec -it 3e3a1826ed34 redis-cli,成功!
在这里插入图片描述

9、本地镜像发布到阿里云

1、镜像的生成方法
(1)方式一:编写dockerfile,执行dockerfile
(2)从容器中创建一个新的镜像,docker commit [OPTIONS] 容器ID:TAG
2、创建仓库镜像
在这里插入图片描述
然后点击个人版,(第一次进来是让创建个人版实例)
在这里插入图片描述
镜像仓库,创建仓库,填写好相应参数
在这里插入图片描述
其中有一步,选择本地仓库
在这里插入图片描述
成功
在这里插入图片描述

3、将镜像推送到阿里云
(1)登录阿里云Docker Registry
docker login --username= registry.cn-shanghai.aliyuncs.com
会提示输入密码。
(2) sudo docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/francis_zend/francis:[镜像版本号]
(3)推送
docker push registry.cn-shanghai.aliyuncs.com/francis_zend/francis:[镜像版本号]
(4)拉取
sudo docker pull registry.cn-shanghai.aliyuncs.com/francis_zend/francis:[镜像版本号]

在这里插入图片描述
在阿里云镜像站中搜索francis_zend/francis也能查看到上传的镜像,但是现在在维护中,或者是我找的地方不对。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
什么是Docker Docker 最初是dotCloud 公司创始人Solomon Hykes 在法国期间发起的一个公司内部项目, 它是基于dotCloud 公司多年云服务技术的一次革新,并于2013 年3 月以Apache 2.0 授权 协议开源,主要项目代码在GitHub 上进行维护。Docker 项目后来还加入了Linux 基金会, 并成立推动开放容器联盟(OCI)。 Docker 自开源后受到广泛的关注和讨论,至今其GitHub 项目已经超过4 万6 千个星标和一 万多个fork。甚至由于Docker 项目的火爆,在2013 年底,dotCloud 公司决定改名为 DockerDocker 最初是在Ubuntu 12.04 上开发实现的;Red Hat 则从RHEL 6.5 开始对 Docker 进行支持;Google 也在其PaaS 产品中广泛应用DockerDocker 使用Google 公司推出的Go 语言进行开发实现,基于Linux 内核的 cgroup,namespace,以及AUFS 类的Union FS 等技术,对进程进行封装隔离,属于操作 系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容 器。最初实现是基于LXC,从0.7 版本以后开始去除LXC,转而使用自行开发的 libcontainer,从1.11 开始,则进一步演进为使用runC 和containerd。 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极 大的简化了容器的创建和维护。使得Docker 技术比虚拟机技术更为轻便、快捷。 下面的图片比较了Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件 后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程 直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比 传统虚拟机更为轻便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值