Docker 初识

news/2024/7/7 19:03:27

一、Docker 简介

Docker是一个开源的应用容器,用户可以将web程序和服务打包到一个轻量级、可以移植的容器中,然后发布到任务流行的Linux服务器上,实现虚拟化。同时完全是沙箱操作,即Docker内部是一个沙箱操作,项目之间不会有任何接口,并且开销极低。

二、Docker(centos)安装

1. 移除旧的Docker服务
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine
2. 安装必要的参数
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3. 设置软件源的来源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4. 更新yum缓存
sudo yum makecache fast
5. 安装 Docker-ce
sudo yum -y install docker-ce
6. 启动
sudo systemctl start docker
7. 设置开机启动
chkconfig docker on
8. 测试运行 hello-world
docker run hello-world
9. 镜像加速,在 /etc/docker/daemon.json中添加下面的内容,没有改文件,则创建该文件。
{"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
# 国内加速镜像
# 网易加速器:http://hub-mirror.c.163.com
# 官方中国加速器:https://registry.docker-cn.com
10. 删除Docker CE
sudo yum remove docker-ce
sudo rm -rf /var/lib/docker

三、Docker 基础

Docker重要的基础概念:仓库,镜像,容器

  1. 仓库:注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04、12.04等不同版本的镜像,很多人会把仓库与registry混为一谈,其实registry是存放repository的地方,仓库分为公有仓库与私有仓库;
  2. 镜像:Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统。例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。
  3. 容器:似于一个轻量的沙箱,docker利用容器来运行和隔离应用;容器是从镜像创建的应用运行的实例;容器从镜像启动的时候,docker会在镜像的最上层创建一个可写层,镜像本身保持不变;容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。可以从一个镜像创建无数个容器。平时我们主要操作的就是容器。我们也可以把容器打包成镜像以方便再次使用。镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。
    以前部署一个程序nginx,会进入到linux服务器上,下载nginx程序,然后运行。如果现在有一个镜像,该镜像就像是虚拟机一样的一个镜像文件,该文件运行起来,和那个nginx部署在linux服务器环境一样,nginx程序也在其中,然后运行该镜像中的已经存在的nginx程序,这个时候可以叫他容器,运行该容器后nginx就启动起来了。
    hub中央仓库是一个公共的库,可以创建账号之后,将自己的内容推送到上面,https://hub.docker.com/注册自己账号

四、Docker命令

1. 基础命令

docker ps -- 查看当前运行在容器中的程序
docker pull image_names -- 拦截镜像文件 image_name镜像文件的名称
docker images -- 查看当前容器中的镜像文件
docker rmi imageName --删除镜像文件

2. 案例:
  1. 运行程序
    docker pull training/webapp --拉取镜像
    docker run -d -P training/webapp python app.py --运行程序
    -d 让容器在后台中运行
    -P 将程序端口映射到主机上
  2. 添加自己的hub上账号
sudo docker login
Username: ***
Password:
Email: ***
  1. 使用Dockerfile来构建自己的镜像
1. mkdir workdir
2. cd workdir
3. touch Dockerfile  添加如下内容:
# Version: 0.0.1
FROM ubuntu:14.04
MAINTAINER Wangzhe0912 "Wangzhe0912@tju.edu.cn"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo "Hi, I am your contrainer" > /usr/share/nginx/html/index.html
EXPOSE 80

代码含义:
1.每个Dockerfile的第一行指令都应该是FROM开头。FROM用于制定一个已经存在的镜像,后续指令都是基于该镜像来运行。这个镜像我们称之为基础镜像。
2.MAINTAINER后说明该作者和作者邮箱信息。
3.接下来是三条RUN指令。默认情况下,指令后的内容会通过/bin/sh -c来执行。
4.最后设置了EXPOSE,该指令用于指定容器内的应用程序会使用哪些端口(可以指定多个)。PS:出于安全考虑,默认Docker不会自动打开这些端口,
5.需要在docker run指令中指定需要打开的端口
4.构建镜像

docker build -t="wangzhe0912/nginx:v1"` .  (后面有一个点,表示执行当前目录下的Dockerfile文件,-t="wangzhe0912/nginx:v1"指定了新生成镜像的镜像名称,也可以从git仓库中寻找docker build -t="wangzhe0912/nginx:v1"` git@github.com:wangzhe0912/docker_web)

Dockerfile构建的好处是如果某一步执行失败了,以前面的镜像存储于缓存中,如果再次构建时会利用该缓存,如果不想,则执行

sudo docker build --no-cache -t="wangzhe0912/nginx:v1" .

如果想利用缓存,则需要在第一个RUN之前指定: ENV REFRESHED_AT 2018-01-28该命令行。如果该缓存变化了,则重新构建,如果没有变化,则会利用该缓存中的镜像。
如下:

# Version: 0.0.1
FROM ubuntu:14.04
ENV REFRESHED_AT 2018-01-28
MAINTAINER Wangzhe0912 "Wangzhe0912@tju.edu.cn"
RUN apt-get update

5.将镜像推送到hub仓库中 sudo docker push wangzhe0912/nginx

五、优势和使用场景

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势:

  • Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。
  • Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
  • Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。
  • Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。

转载于:https://www.cnblogs.com/skyice/p/10159436.html


http://lihuaxi.xjx100.cn/news/252691.html

相关文章

JAVA swing初级教程(四)

附加的swing小部件(下) JOptionPane JOptionPane 是在 Swing 中类似“快捷方式”的东西。通常,作为 UI 开发人员,您需要向用户呈现快速信息,让用户了解错误和信息。甚至可能想得到一些快速数据,例如名称或数字。在 Swing 中&#…

MYSQL 客户端与服务器关系

http://blog.csdn.net/u012501054/article/details/54927311转载于:https://www.cnblogs.com/xtdxs/p/6662986.html

使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰…

Datawhale组队学习周报(第026周)

文章目录已经结营的开源内容即将结营的开源内容正在进行的开源项目九月排期的开源内容每周号外Whalepaper 招新公告本文总结了本周(08月09日~08月15日)Datawhale组队学习的运行情况,我们一直秉承“与学习者一起成长的理念”,希望这…

Python、C、Java 和 C++ 四足鼎立,其他已无胜算? | TIOBE 10 月编程语言排行榜

整理 | 苏宓出品 | CSDN(ID:CSDNnews)技术的千变万化,都是有迹可循的,最新的 TIOBE 十月编程语言榜单重磅发布,快来看看有哪些值得关注的变化吧!四大编程语言不断增强其主导地位曾几何时&#x…

【MATLAB】函数句柄

在MATLAB平台中,对函数的调用方法分为直接调用法和间接调用法。 1、直接调用函数,被调用的函数通常称为子函数。一个文件中只能有一个主函数。 2、函数句柄——提供一种间接调用函数的方法。创建函数句柄需要用到操作符。 创建函数句柄的一般句法格式…

模仿VIMD的模式的简化代码示例

按numpad0来切换模式,按t显示不同的结果; Numpad0:: tfmode:!tfmode aaa:(tfmode1?"AAAA":"BBBB") SplashImage Off SplashImage, "",X500 Y500 W200 B fs10 CT00FFFF CW000000,%aaa%, , 切换模式提示 WinSet, Tr…

PHP定时执行任务的实现

2019独角兽企业重金招聘Python工程师标准>>> ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行. set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去 $interval60*30;// 每隔半小时运行 do{//这里是你要执行的代码 sleep($i…