当前位置: 首页 > news >正文

做网站空间放哪些文件夹小程序制作流程步骤

做网站空间放哪些文件夹,小程序制作流程步骤,wordpress首页发布图片,查看网站域名Docker新手入门#xff1a;基本用法 1.Docker简介 1.1 第一本Docker书 工作中不断碰到Docker#xff0c;今天终于算是正式开始学习了。在挑选系统学习Docker以及虚拟化技术的书籍时还碰到了不少麻烦#xff0c;主要就是没有特别经典的书#xff01;Docker的《第一版Docker书… Docker新手入门基本用法 1.Docker简介 1.1 第一本Docker书 工作中不断碰到Docker今天终于算是正式开始学习了。在挑选系统学习Docker以及虚拟化技术的书籍时还碰到了不少麻烦主要就是没有特别经典的书Docker的《第一版Docker书》和《Docker技术入门与实战》普遍评价不高而《Docker开发实践》和《Dockeru源码分析》又是2015年最近才出的评价不是很多。综合看了下最终还是选择了《Docker开发实践》以下都主要以这本书作为学习资料。 1.2 Docker是什么 《Docker开发实践》中讲了个故事20世纪60年代以前的海运货物都放置在一起很容易挤压受损。同时不同的运输方式之间的转运也很麻烦例如从码头和火车汽车转运卸货时。不同货物和不同交通工具之间的组合是一个巨大的二维矩阵。海运界最后达成了一致制定了国际标准集装箱来解决这个棘手的问题。所有货物都打包进集装箱互相隔离所有交通工具都通过集装箱转运极大地提供了运输的安全性和效率。 在软件开发中我们也经常碰到同样的问题使用了各种各样技术框架的应用程序从前端静态网站到后端数据库从PHP到Java以及多种多样的部署环境从测试服务器到线上环境从虚拟机到公有云等等。Docker正是这个集装箱而Docker的logo也的确是个集装箱。 1.3 Docker与容器和虚拟机 很自然地我们会问Docker跟虚拟机有什么区别啊这个问题可以拆成两部分。因为Docker并不是什么完全独创的技术而是属于很早便有了的容器技术所以第一个问题就是容器与虚拟机的区别同属于容器技术Docker的兄弟姐妹还有Solaris Zones、BSD jails、LXC等。但Docker现在这么火自然有它的独到之处所以第二个问题就是Docker与其他容器的区别 关于第一个问题比较简单容器是一种轻量级的虚拟技术。它不像虚拟机那样具有一套完整的CPU、内存和磁盘对操作系统有绝对的权限。容器和宿主主机共享内核所有容器共享操作系统在一台物理机上可以运行成百上千的容器。第二个问题稍麻烦一些与LXC相比Docker对配置进行了抽象使应用在任何平台上的运行环境都一致。同时提供了版本控制、镜像托管等类似Git的现代化设施和生态圈。 总体来看Docker的应用场景有 加速本地开发快速搭建好开发环境和运行环境。自动打包和部署应用。创建轻量级的私有Paas环境。自动化测试和持续集成。创建安全沙盒。2.Docker安装与32位问题 2.1 安装Docker Docker对Linux环境有两个要求一是64位系统二是内核在3.8以上。而我使用的是Linux Mint 17的32位版所以下载了源码包准备编译安装。正愁找不到编译安装的资料时发现Ubuntu软件库提供了已经编译好的Docker 32位版真是太好了再看一下我的内核版本是3.13也符合要求于是直接用apt安装。 cdaidell ~ $ uname -a Linux dell 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:30:01 UTC 2014 i686 i686 i686 GNU/Linuxcdaidell ~ $ apt-cache search docker docker.io - Linux container runtime kdocker - lets you dock any application into the system tray vim-syntax-docker - Docker container engine - Vim highlighting syntax filescdaidell ~ $ sudo apt-get install docker.io cdaidell ~ $ docker -v Docker version 1.0.1, build 990021a 2.2 32位版镜像 尽管Docker能用了但是官方Docker Hub中的镜像都是为64位系统准备的下载这些镜像后创建启动容器时会报”finalize namespace drop capabilities operation not permitted”的错误。所以我们可以用官方提供的Dockerfile构建出32位版本的镜像才能在32位系统上使用。镜像构建的具体讲解请参见第3.4节 以构建32位版的Ubuntu为例执行官方GitHub上提供的Shell脚本即可。经过漫长的等待后就能看到32位的Ubuntu镜像已经成功安装到我们本地了官方的脚本果然还是挺靠谱的。 cdai ~ $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 32bit/ubuntu 14.04 c062cc00654e About a minute ago 295.3 MB 注意这里为了在我的老本子上学习研究Docker而做了workaround真正应用时当然还是一定要在64位机器上使用Docker的。 3.入门实战 3.1 核心概念 在开始使用Docker之前首先要了解Docker中的概念和它们之间的关系否则直接上手可能会搞得一头雾水。Docker中最重要的三个概念就是镜像、容器、库。 镜像是一个包含了应用程序和其运行时依赖环境的只读文件。容器它是构建容器的模板通过一个镜像我们可以构造出很多相互独立但运行环境一样的容器。库Docker提供了Hub来保存公有或私有的镜像也允许第三方搭建。下面就是典型的Docker工作流从这张图中能清晰地理解这三个重要概念之间的关系。本节接下来就根据这个Workflow逐一介绍常用的操作。 3.2 搜索下载镜像 首先用docker search [keyword]命令查看Docker Hub上都有哪些镜像可以下载search后可以用通配符表示关键字 cdai ~ $ docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating s... 2179 [OK] ubuntu-upstart Upstart is an event-based replacement for ... 31 [OK] torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 25 [OK] tleyden5iwx/ubuntu-cuda Ubuntu 14.04 with CUDA drivers pre-installed 17 [OK] ubuntu-debootstrap debootstrap --variantminbase --components... 12 [OK] neurodebian NeuroDebian provides neuroscience research... 11 [OK] ... 接下来用docker pull [repository/url:tag]命令下载镜像。因为从官方Docker Hub下载非常慢所以这里从国内的镜像站http://dockerpool.com/下载速度非常快。注后面会讲到用docker run命令创建容器其实如果镜像不存在Docker会自动去下载这里为了学习pull命令所以手动下载镜像 cdai ~ $ docker pull dl.dockerpool.com:5000/ubuntu:14.04 cdai ~ $ docker pull dl.dockerpool.com:5000/centos:latest 下载完成后就可以用docker images查看本地都有哪些镜像。这里的REPOSITORY列可能有三种类型 [namespace/ubuntu]当你在Docker Hub上注册账户时账户名就自动成为你的namespace它是用来区分不同用户的镜像的。[ubuntu]这种只有仓库名的可以认为它属于顶级namespace这种仓库只用于官方的镜像。[dl.dockerpool.com:5000/ubuntu]URL路径表示镜像是放置在第三方搭建的Hub上。cdai ~ $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE dl.dockerpool.com:5000/ubuntu 14.04 5506de2b643b 10 months ago 199.3 MB dl.dockerpool.com:5000/centos latest 87e5b6b3ccc1 11 months ago 224 MB 如果想要查看镜像的详细信息可以用docker inspect [image-id]命令查看。注下面容器一节会看到这个命令也能够用来查看容器的详细信息 cdai ~ $ docker inspect 5506de2b643b [{Architecture: amd64,Author: ,Comment: ,Config: {AttachStderr: false,AttachStdin: false,AttachStdout: false,Cmd: [/bin/bash],...},Container: 201ae89099c20e577dd9c60cb9199c2dac0688d49efa676bf3eeb859666294bd,ContainerConfig: {AttachStderr: false,AttachStdin: false,AttachStdout: false,...},Created: 2014-10-23T23:53:59.03271073Z,DockerVersion: 1.3.0,Id: 5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5,Os: linux,Parent: 22093c35d77bb609b9257ffb2640845ec05018e3d96cb939f68d0e19127f1723,Size: 0 }] 3.3 创建启动容器 了解了镜像的基本操作后我们就可以创建容器了。首先用docker create创建容器或者用docker run [repository:tag]创建并运行容器。容器可以分为两种类型 交互型容器前台运行可以通过控制台与容器交互。如果创建该容器的终端被关闭则容器就变为停止状态。此外在容器控制台中输入exit或者通过docker stop或docker kill也能终止容器。后台型容器后台运行创建启动之后就与终端无关了需要用docker stop或docker kill来终止。 说明因为我的老本子是32位的即便从第三方Hub安装了镜像也都是64位的无法使用所以这里的例子都使用第一节中手动构建出的32位Ubuntu镜像。 首先我们创建运行一个交互型容器试试在容器的控制台里简单的输出个”Hello,Docker”。怎么样Docker容器非常轻量级启动非常快吧用docker ps可以查看正在运行的容器用docker ps -a查看所有容器包括未启动的容器。-l和-nx能列出最后创建的一个或x个容器 cdai ~ $ docker run -i -t 32bit/ubuntu:14.04 /bin/bash root328aa6305d82:/# echo Hello, Docker! Hello, Docker! root328aa6305d82:/# exit exitcdai ~ $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 328aa6305d82 32bit/ubuntu:14.04 /bin/bash 24 seconds ago Exited (0) 4 seconds ago stupefied_curie 现在再创建运行一个后台型容器。可以用restart参数设置容器异常退出时自动重启”always”不管什么返回码都尝试重启容器”on-failure:x”则只在返回码非0时才会重启并尝试x次。最后可以接上一个容器启动后执行的命令。这里为了做一个例子学习所以用一个循环每隔5秒输出”hello world”。Docker 1.3后提供了docker exec用于在容器运行之后中途启动另一个程序 cdai ~ $ docker run -d 32bit/ubuntu:14.04 /bin/bash -c while true; do echo hello world; sleep 5; done 5c40590cc23cfa02bd6c0220da77b601973f01f8bc430baca22315ef68d81e44 cdai ~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5c40590cc23c 32bit/ubuntu:14.04 /bin/bash -c while 5 seconds ago Up 5 seconds evil_bartik 现在容器已经在后台运行起来了没有控制台我们怎样能查看容器的状态呢Docker提供了一些很实用的容器内操作命令例如docker logs [container-name]能够查看容器内标准输出流中的内容docker top [container-name]查看容器中的所有进程。下面就用这两个命令查看一下刚才启动的容器运行得怎么样了注意启动容器时如果没用name参数指定容器名称的话Docker会自动生成一个下面的命令都用这个名称作为参数。 cdai ~ $ docker logs -f evil_bartik hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world ^C cdai ~ $ docker top evil_bartik UID PID PPID C STIME TTY TIME CMD root 26803 1700 0 21:54 ? 00:00:00 /bin/bash -c while true; do echo hello world; sleep 5; done root 26859 26803 0 21:55 ? 00:00:00 sleep 5 可以看到我们的容器运行良好循环体在不断输出”hello world”到输出流中。之前学习镜像说过docker inspect也可以用于容器现在就用它查看一下容器的详细信息。从输出可以清晰地看到启动命令、环境参数、网络等信息。 cdai ~ $ docker inspect evil_bartik [{Args: [-c,while true; do echo hello world; sleep 5; done],Config: {AttachStderr: false,AttachStdin: false,AttachStdout: false,Hostname: 5c40590cc23c,Image: 32bit/ubuntu:14.04,...},Created: 2015-09-03T13:54:03.389202827Z,Driver: aufs,...MountLabel: ,Name: /evil_bartik,NetworkSettings: {Bridge: docker0,Gateway: 172.17.42.1,IPAddress: 172.17.0.5,IPPrefixLen: 16,PortMapping: null,Ports: {}},... }] 容器学习的差不多了现在就把它停下来了吧。之前说过对于后台型容器有docker stop [container-name]和docker kill [container-name]两种方法。那它们有什么区别呢前者会给容器内的进程发送SIGTERM信号默认行为是容器退出当然容器内的程序也可以捕获该信号后自行处理。而后者会给容器内的进程发送SIGKILL信号导致容器直接退出。 cdai ~ $ docker stop evil_bartik evil_bartik cdai ~ $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5c40590cc23c 32bit/ubuntu:14.04 /bin/bash -c while 3 minutes ago Exited (-1) 5 seconds ago evil_bartik 328aa6305d82 32bit/ubuntu:14.04 /bin/bash 11 minutes ago Exited (0) 11 minutes ago stupefied_curie 3.4 制作上传镜像 本地镜像的制作有使用commit命令和编写Dockerfile两种方式。下面就先分别介绍这两种制作方式然后学习一下如何把我们自己制作的本地镜像上传到Docker Hub上。 3.4.1 用commit制作镜像 首先启动我们之前创建的交互型容器stupefied_curie。启动成功后会发现我们并没有进入容器的控制台这时就要使用之前没有介绍的一个容器内使用的命令attach命令帮我们重新进入一个已启动容器的控制台。注意执行attach后要按一次回车才会出现容器的控制台界面。而且后台型容器是无法attach的 cdai ~ $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 328aa6305d82 32bit/ubuntu:14.04 /bin/bash 10 hours ago Exited (0) 10 hours ago stupefied_curie attach上之后我们就可以在容器内操作了这里我们安装一个Sqlite数据库并保存一个文本文件准备好要制作成本地镜像的容器。本以为一切会很顺利结果却碰到了容器内无法上网的问题因为默认容器与宿主主机是桥接的关系需要配置一些DNS等设置。上网查了一下最简单的方法就是改一下网络模式让容器使用与宿主主机一样的网络栈。这里重新创建一个交互型容器网络模式使用host模式。 cdai ~ $ docker run -i -t --nethost 32bit/ubuntu:14.04 /bin/bash rootcdai:/# apt-get install sqlite3 Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages:sqlite3-doc The following NEW packages will be installed:sqlite3 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 28.3 kB of archives. After this operation, 161 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu/ trusty-updates/main sqlite3 i386 3.8.2-1ubuntu2.1 [28.3 kB] Fetched 28.3 kB in 2s (10.8 kB/s) Selecting previously unselected package sqlite3. (Reading database ... 11535 files and directories currently installed.) Preparing to unpack .../sqlite3_3.8.2-1ubuntu2.1_i386.deb ... Unpacking sqlite3 (3.8.2-1ubuntu2.1) ... Setting up sqlite3 (3.8.2-1ubuntu2.1) ... rootcdai:/# echo test docker commit hellodocker rootcdai:/# exit exit 现在就可以用docker commit [container-id]命令将前面准备好的容器制作成镜像了为什么有的命令用ID有的用name呢执行完成后就能查我们的镜像已安装到本地库了。这里还发现了一个问题就是基于32位镜像创建的容器再制作成镜像好像又是64位了启动时又会报”finalize namespace drop capabilities operation not permitted”错误 cdai ~ $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1718e35463ff 32bit/ubuntu:14.04 /bin/bash 53 seconds ago Exited (0) 8 seconds ago boring_babbage cdai ~ $ docker commit --authorcdai 1718e35463ff cdai/sqlite3:v1 e10622157a5df7c82bdf148bda021e0fe312c153852f7a6c765c216d4d636ecb cdai ~ $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE cdai/sqlite3 v1 e10622157a5d 6 seconds ago 321.8 MB 32bit/ubuntu 14.04 c062cc00654e 11 hours ago 295.3 MB 3.4.2 用Dockerfile制作镜像 上面我们在容器的控制台上手动执行一些操作而Dockerfile是一种更加透明并且可重复的制作方式因为我们不是手动执行操作而是将所有操作用Docker提供的命令和语法编写到Dockerfile中。命令名全部大写常用的Dockerfile命令有 FROM指定扩展自哪个父级镜像。RUN执行命令修改镜像。例如RUN apt-get update和RUN [“apt-get”, “update”]。前者在/bin/sh中执行命令后者直接使用系统调用exec执行。EXPOSE指明容器内进程对外开放的端口。也可以在容器启动时用-p参数开放一些在Dockerfile里没有列出的端口。ADD添加宿主主机文件、文件夹或URL指定资源到镜像中。ENV设置容器运行的环境变量。USER为容器的运行以及Dockerfile后面的命令指定用户。其他命令还有MAINTAINER声明作者信息、WORKDIR指定工作目录最后一个会作为容器启动后的工作目录、VOLUME挂载文件、CMD和ENTRYPOINT指定容器启动后执行的命令、ONBUILD指定一些命令在当前镜像构建时不会执行而是在子镜像构建时触发。 了解了这些常用的命令下面就可以开始编写Dockerfile了。注意Dockerfile文件名默认就叫”Dockerfile”否则执行build命令时Docker会找不到。编写好后执行docker build .就可以开始构建了每一条Dockerfile的命令都相当于构建出一个临时镜像最后一步会生成最终的目标镜像。 cdai $ ls -rw-r--r-- 1 root root 17 Sep 4 09:08 abc.txt -rw-r--r-- 1 root root 188 Sep 4 09:08 Dockerfile cdai $ cat Dockerfile FROM 32bit/ubuntu:14.04 MAINTAINER cdai XXX163.com USER root RUN apt-get install -y nginx EXPOSE 80 8080 RUN touch test.txt ADD abc.txt . ENTRYPOINT [ls] CMD [-a, -l]cdai $ docker build -t cdai/nginx:v1 . Sending build context to Docker daemon 3.584 kB Sending build context to Docker daemon Step 0 : FROM 32bit/ubuntu:14.04--- c062cc00654e Step 1 : MAINTAINER cdai dc_726163.com--- Running in 53ece79679ed--- 979f81286bbe Removing intermediate container 53ece79679ed Step 2 : USER root--- Running in f5d29e4895e5--- 4965bbb8d8cd Removing intermediate container f5d29e4895e5 Step 3 : RUN apt-get install -y nginx--- Running in d4e46baff94a Reading package lists... Building dependency tree... Reading state information... The following extra packages will be installed:fontconfig-config fonts-dejavu-core geoip-database libfontconfig1libfreetype6 libgd3 libgeoip1 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5libvpx1 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxml2 libxpm4libxslt1.1 nginx-common nginx-core sgml-base xml-core Suggested packages:libgd-tools geoip-bin fcgiwrap nginx-doc sgml-base-doc debhelper... Setting up nginx (1.4.6-1ubuntu3.3) ...--- 73f5d909ac29 Removing intermediate container d4e46baff94a Step 4 : EXPOSE 80 8080--- Running in 4333d2f3c58c--- b693316fb774 Removing intermediate container 4333d2f3c58c Step 5 : RUN touch test.txt--- Running in 815dfbfb2005... 3.4.3 上传镜像到Hub 首先用docker login命令输入我们在Docker Hub的登录信息Docker会将其保存到~/.dockercfg中。 cdai $ docker login Username: cdai Password: Email: XXX163.com Login Succeeded cdai $ cat ~/.dockercfg {https://index.docker.io/v1/:{auth:XXXXaToxXXXXXXlEYiE,email:XXX163.com}}cdai $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE cdai/sqlite3 v1 e10622157a5d 37 minutes ago 321.8 MB 32bit/ubuntu 14.04 c062cc00654e 11 hours ago 295.3 MBcdai $ docker push cdai/sqlite3:v1 The push refers to a repository [cdai/sqlite3] (len: 1) Sending image list Pushing repository cdai/sqlite3 (1 tags) c062cc00654e: Buffering to disk ... 4.附Docker相关技术 容器隔离采用libcontainer取代了LXC作为默认容器。通过内核的pid、net、ipc、mnt和uts等命名空间实现对进程、网络、消息、文件系统和主机名的隔离。资源调配通过cgroups控制资源的度量和分配。可移植性利用AUFS实现对容器的快速更新。AUFS具有层的概念每次修改都是在已有的只写层进行增量修改修改内容形成新的文件层而不影响原有的层。安全性通过命名空间的隔离和cgroups审计并配合一系列工具如SELinux等来保证安全。 转载于:https://www.cnblogs.com/xiaomaohai/p/6157599.html
http://www.lebaoying.cn/news/110173.html

相关文章:

  • 奉化网站关键词优化费用手机编辑WordPress博客
  • 专题页网站怎么做网站作为医院形象建设
  • asp 网站路径泄露 解决郑州seo学校
  • 兼职做设计什么网站好微商手机网站制作公司哪家好
  • 什么网站的注册是动态定制礼品公司
  • 做搜索引擎的网站做网站需要的东西
  • 好用的网站开发框架wordpress用微信登录
  • 创立网站vi设计网站运动康复
  • 网站建设方案书备案cad图纸免费下载网站
  • 公司申请域名seo技术员
  • wordpress音乐代码wordpress seo不好
  • 建网站建设咸宁网页设计
  • 营销网站设计昆山网站建设第一品牌
  • 中国微电影 网站开发者安卓开发程序
  • 杭州pc网站建设方案做网站商城要注册什么公司
  • 集团高端网站工作服定做厂家
  • 找客户在公司做网站做淘客都有什么网站
  • 发卡网站搭建教程网站建设需要匹配人员
  • 成都网站建设方案推广网站制作与网页制作
  • 解析视频的网站怎么做中企动力网站建设精品案例
  • 太原做网站软件wordpress 扒皮
  • 北京专业网站营销网站开发去哪里找工作
  • 佛山宽屏网站建设wordpress外贸网站建设
  • 怎么建造网站网页浏览历史记录恢复
  • 山东新昌隆建设咨询有限公司网站网站建设方案模版
  • 天津建设网站安全员考试成绩查询企业解决方案英文
  • 河南省建设集团有限公司网站wordpress google font
  • 什么服装网站做一件代发东方网络律师团队
  • 网页设计和网站设计的区别东莞计算机培训机构哪个最好
  • 福州专业网站建设推广费用设计网页的步骤是什么