docker安装操作系统,docker里安装电脑系统
1.如何在不同操作系统部署Docker环境
2.linux安装docker建议使用什么系统
3.超值一篇分享,Docker:从入门到实战过程全记录
4.如何通过docker容器安装LNMP服务器环境
5.Windows Server 2019 Core(4)-安装Docker
2023-05更新,建议用win11做nas,windows server的驱动太差了,会比win11少300多MB的驱动,核显、声卡、蓝牙等等都需要一个一个去官网爬,手动安装,微软商城就算安装了也只有win10的,里面下不了什么软件,win11的就多很多,还有若是13代(13700)这种大小核的,win11支持更好。
WIN NAS的安装及使用
Docker实例
略过系统安装,只是记录自己的软硬配置,以便以后迁移时好直接照搬,不会有人不会装windows吧。
本想用freenas或者是黑群晖这些基于linux的来搭建,但是大部分nas系统没有虚拟机,黑裙有点不稳定,白裙那配置和价格,算了算了。
用pve或者exsi又太重了,我的需求仅仅是下BT/PT和存储一些项目文件,docker跑些应用内网穿透出去就可,而且虚拟化平台连接WiFi是个问题。
选来选去,看着b站知乎一堆推荐如上NAS的,自己装了好几个用了下,不太行,最后看见有人推荐WIN NAS,我也问了下玩NAS的朋友,也用的WIN做NAS,遂开装。
系统直接选WIN Server 2022,驱动装好可以连WIFI,内网WIFI6对我来说够了(你要上万兆就接网线),我的机器是直接丢阳台就一根电源线接插座,虚拟机有hyper-v,存储有自带的存储池,可以做refs(单盘raid5)或者固态加速机械分层存储,组多盘raid都没问题,有图形化。
这配置单U功耗顶天100W多点,待机时为30W左右,如果在主板内降频能更低,散热用的利民AXP X67,室温23°,待机温度只有25°,比起e5、e3那些能效比好多了,闲时还能接屏幕(MSTSC)玩下英雄联盟和雀魂都是没问题的,唯一的缺点就是docker用起来麻烦点。
这套方案的核心是docker,有docker就有nas,docker run跑起来各种套件,nextcloud、seafile、nas-toos、nginx等等,性能完全够,如果有公网ip,那么外网速度取决于你的上行带宽,如果用内网穿透,那么外网速度为公网机器和你上行带宽的最小值。
硬件
配置
供电
硬盘坏的原因无非有三,供电不稳或不足、碰撞震动及roll到了。
机械18T单盘峰值可以到28W,13*30W算为390W,CPU给电150W,其他给电50W,390+150+50=590W,650W在峰值时刚好,电源最高支持到700W,但是日常没这么高,同时硬盘也不是一次买完。
然后是噪音,4k读写30min,来到了50分贝。温度看核显的才25°,满载我还没见过70°+,除非超频。
容量和速度
机械盘的4k随机读写基本忽略,不用测根本不可能跑满接口。
然后是顺序读写,13块盘同时读写不可能,虽然硬盘顺序峰值能到270MB/s,但是日常没那么高,这里按照每块盘100MB/s算,13块盘也就1.3GB/s,也算是很高的负载了。
PCIE
主板华硕B550m(WIFI)
3个PCIE槽,PCIE 4.0*16和PCIE 3.0*16(芯片组)和PCIE 3.0*1(芯片组),硬件接口分别为PCIE 16、PCIE 16、PCIE 1展示。
2个M.2插槽,PCIE 4.04(CPU直连)和PCIE 3.04(芯片组)4个SATA插槽(芯片组)。
CPU5700G
有24条PCIE 3.0,第一个PCIE占用16条,第一个M.2占用4条,南桥(芯片组)占用4条。
主板直连PCIE 4.0*16和(M.2)PCIE 4.0*4即最大速度约为40GB/s。
主板南桥PCIE 3.0*4,即芯片组的最大速度约为4GB/s。
CPU的PCIE 3.0*24最大速度约为24GB/s。
这里取最小值,即存储到CPU的最大速度为24GB/s。
机械盘速度目前顺序读能到100MB/s,最大不会超过250MB/s,4k随机速度可以忽略,所以南桥扩展13口sata给机械盘就够用了,日常根本不会跑满4GB/s。
机箱长城阿基米德7B
支持13个3.5盘,2个2.5盘位,实际上还能再装2个2.5固态。除开系统盘和系统盘备份,我算的设备全齐情况,最大容量为260T机械+6T PCIE3.0固态,做完raid和存储池估计只剩200T左右。
机械硬盘(单价1600)二手企业级目前最大的机械按20T算,13*20T=260T(270MB/s)如果阵列卡做存储池合计速度为13*270MB/s=3.5GB/s。
sata固态(单价800)固态2*3T=6T(500MB/s)。
主板华硕B550m(WIFI)
直连CPU 15GB/s(CPU阈值24GB/s)。
M.2_1(PCIE 4.0x4):凯侠RC20?1T(3GB/s),系统盘。
PCIE_1(PCIE 4.0x16):扩展卡。
拆分为PCIE 3.0(3GB/s)*4的4个2T的3.0 M.2硬盘,即8T(12G/s)。
南桥260T合计峰值3.3 GB/s(芯片组阈值4GB/s)。
M.2_2:台电1T(2GB/s),每天为系统盘做增量备份,速度忽略。
PCIE_2(PCIE 3.0x4):9271 8i阵列卡+扩展卡82885t。
日常13*20T=260T(100MB/s*13=1.3GB/s),机械顺序跑满按250MB/s,13盘才3.25GB/s。
主板sata:4口6Gb/s接口,即和扩展卡一样。
2 sata固态3T*2=6T(1GB/s)
硬盘分配
使用9271 8i阵列卡接入南桥PCIE,使用82885t作为扩展卡,按我的实际情况,机械盘以250MB/s计算,m2固态以3GB/s计算,sata固态以500MB/s,机械盘16T算
机械盘连接为主板南桥PCIE——>9271 8i阵列卡(硬raid)——>8087转8643线——>82885t扩展卡——8643一分四转8642(sata口)——〉机械盘。
开机自动登录
win+r运行regedit注册表
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device
DevicePasswordLessBuildVersion改为0
win+r运行netplwiz,取消掉必须输入选框
WSL2
在服务器管理里添加角色和功能里打开hyper-v,然后在命令行输入wsl--install,之后重启,重启完继续wsl--install,然后wsl-l-v查看版本为2即安装成功。
常用应用
应用程序
Docker内网服务
Docker公网服务器(境外)
如何在不同操作系统部署Docker环境
当前版本的 docker-desktop 已经默认开启支持WSL2,安装时保持默认选项直接下一步,安装完毕之后重启电脑。之后docker会弹出WSL2尚未配置完毕,点击提示框中的链接,安装MSI扩展包,重启电脑即可愉快地使用docker。
想在Windows上运行docker,可谓是一言难尽。从最初的docker-toolbox到基于Hyper-v虚拟化的docker-desktop,无论是哪个方式,都有一堆一堆的坑点。
想要在windows上愉快地玩耍docker,难道就只能virtualbox装个linux再装docker?(或者docker-client配远程docker-daemon?)
于是,我决定换个坑踩。
以管理员运行Powershell(开启WSL,如已开启可跳过)
之后重新启动计算机。
以管理员身份打开 PowerShell 并运行:
启用这些更改后,需要重新启动计算机。
在 PowerShell 中运行:
打开Microsoft Store,搜索 ubuntu 并安装。
之后启动刚刚安装的Ubuntu。
打开刚刚安装的Ubuntu,安装依赖:
信任 Docker 的 GPG 公钥:
对于 amd64 架构的计算机,添加软件仓库:
最后安装
安装大功告成了,运行
不出意外的话,大概率会报错。
将当前用户添加到docker用户组
之后重启 windows计算机 。
重启完成后,打开Ubuntu,运行
输出[OK]。
运行
没有报错,?。
注:WSL2是基于Hyper-v的。
(不过感觉比我之前直接用Hyper-v管理平台安装Ubuntu Server启动还是要快。)
linux安装docker建议使用什么系统
Docker是一个为开发人员和系统管理员开发、迁移和运行应用程序的平台。应用程序通过Docker打包成Docker Image后,可以实现统一的方式来下载、启动、扩展、删除和迁移,这样方便了应用程序的部署和运维。本文将介绍如何在不同操作系统平台上部署Docker环境的方法。
更多信息
Ubuntu:
Docker刚推出的时候只支持Ubuntu,后来才一点点开始对其他平台的支持。所以在Ubuntu平台上部署Docker平台还是挺简单的。官方目前支持的版本有Ubuntu Trusty 14.04 (LTS)、Ubuntu Precise 12.04 (LTS)、Ubuntu Saucy 13.10。
Docker要求64位的系统且内核版本至少为3.10(如果是Ubuntu 12.04 LTS,则要求内核版本至少是3.13)。可以使用uname –r命令 来确认当前系统的内核版本:
$ uname -r
3.11.0-15-generic
可以使用以下命令来升级内核:
$ sudo apt-get update
$ sudo apt-get install linux-image-generic-lts-trusty
$ sudo reboot
之后就可以安装Docker了:
$ wget -qO- | sh
最后验证安装是否成功:
$ sudo dockerrun hello-world
RHEL/CentOS:
自RHEL 7开始就自带Docker了,我们只需要直接安装即可:
$ sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
$ sudo yum install docker
另一个支持Docker的RHEL版本是6.5,安装前需确认内核版本是否为2.6.32-431及以上版本。Docker在RHEL上仅支持官方的extras源和EPEL源,因此我们还需安装EPEL repository。注:由于与之前应用的名称冲突,需要先卸载名为“docker”软件包,然后安装正确的docker-io软件包。
$ sudoyum -y remove docker
$ sudoyum install docker-io
$ sudoyum -y update docker-io
然后就可以启动Docker进程了:
$ sudoservice docker start
$ sudochkconfig docker on
$ sudodocker run -i -t fedora /bin/bash
CentOS由于与RHEL的“渊源”,基本上安装要求是差不多的。需要特别注意的是由于CentOS 7引入了firewalld动态管理防火墙守护进程,它会与Docker冲突(启动后会删除Docker在iptables中的规则)。因此如果在启动Docker后又重新启动了firewalld,需要再重启一下Docker进程。
MacOS:
由于Dokcer基于Linux内核的一些功能,因此无法原生地在OS X系统上运行。Docker项目团队因此开发了Boot2Docker工具,它包含了一个轻量的VirtualBox虚拟机以及相关的管理工具。这个虚拟机非常小(大约24MB的下载大小),完全在内存中运行,启动只需大约5秒钟。
运行Boot2Docker要求OS X 10.6 Snow Leopard以上版本。安装文件可以在获得。安装完成后,Boot2Docker位于Applications文件夹。
注:Boot2Docker目前只是作为开发工具发布,请不要将其应用在生产环境中。
创建Boot2Docker虚拟机:
$ boot2docker init
$ boot2docker start$ boot2docker shellinit
显示或设置Docker客户端环境变量
$ boot2docker shellinit
$ eval"$(boot2docker shellinit)"
最后验证安装是否成功:
$ dockerrun hello-world
Windows:
Windows与MAC OS相同,也需要安装Boot2Docker工具。安装文件可以在获得。Windows版的Boot2Docker在启动时会自动确认环境变量,因此可以直接验证安装是否成功:$ dockerrun hello-world。
超值一篇分享,Docker:从入门到实战过程全记录
建议使用Centos7或者Centos8。
根据搜狐网资料显示,Centos7是linux安装docker安装的必要系统,如果没有达到这个系统的话,是无法安装doxker的。
Linux,全称GNU/Linux,是一套免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年第一次释出,它主要受到Minix和Unix思想的启发,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。
如何通过docker容器安装LNMP服务器环境
作者 | 天元浪子
来源 | CSDN博客
想要真正理解Docker,就不得不从虚拟化技术的发展历程说起。普遍认为虚拟化技术经历了物理机时代、虚拟机时代,目前已经进入到了容器化时代。可以说,Docker是虚拟化技术不断发展的必然结果。
那么,什么是容器呢?容器和虚拟机有什么不同?Docker和容器又是什么关系呢?搞明白这几个问题,Docker的概念就清晰了。
1.1 虚拟机和容器
借助于VMWare等软件,可以在一台计算机上创建多个虚拟机,每个虚拟机都拥有独立的操作系统,可以各自独立的运行程序。这种分身术虽然隔离度高(操作系统级),使用方便(类似物理机),但占用存储资源多(GB级)、启动速度慢(分钟级)的缺点也是显而易见的。
相较于虚拟机,容器(Container)是一种轻量型的虚拟化技术,它虚拟的是最简运行环境(类似于沙盒)而非操作系统,启动速度快(秒级)、占用存储资源少(KB级或MB级),容器间隔离度为进程级。在一台计算机上可以运行上千个容器,这是容器技术对虚拟机的碾压式优势。
1.2 容器、镜像和Docker
Docker是一个开源的应用容器引擎,可以创建容器以及基于容器运行的程序。Docker可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
听起来很简单,但是在Docker和容器之间,还隐藏着一个镜像的概念,令初学者颇感困惑。本质上,Docker镜像是一个特殊的文件系统,它提供容器运行时所需的程序、库、资源、配置等文件。Docker镜像类似于一个py文件,它需要Docker的运行时(类似于Python解释器)运行。镜像被运行时,即创建了一个镜像的实例,一个实例就是一个容器。
1.3 Docker 和 k8s
作为容器引擎,Docker为容器化的应用程序提供了开放的标准,使得开发者可以用管理应用程序的方式来管理基础架构,实现快速交付、测试和部署代码。随着容器的大量使用,又产生了如何协调、调度和管理容器的问题,Docker的容器编排应运而生。
k8s是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理,是一个开源的,用于管理云平台中多个主机上的容器化的应用,k8s的目标是让部署容器化的应用简单并且高效,k8s提供了应用部署、规划、更新、维护的一种机制。
Docker和k8sr都是以containerd(容器化标准)作为运行时,因此使用Docker创建的镜像完全可以在k8s中无障碍的使用。
2.1 在ubuntu中安装
在linux系统中安装Docker非常简单,官方为我们提供了一键安装脚本。这个方法也适用于Debian或CentOS等发行版。
安装过程如果出现超时,不要灰心,多试几次,总会成功的。安装完成后,Docker只能被root用户使用,可以使用下面的命令取消权限限制:
然后,重启docker服务:
最后,关闭当前的命令行,重新打开新的命令行就可以了。
顺便提一下,如果在CentOS下安装,可能会出现一堆类似于下面的错误:
这是由于docker和Podman冲突造成的,需要先卸载Podman:
2.2 在Win10中安装
Docker的运行,依赖linux的环境,官方提供了Docker Desktop for Windows,但是它需要安装Hyper-V,Hyper-V是微软开发的虚拟机,类似于 VMWare 或 VirtualBox,仅适用于 Windows 10。这个虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无法使用!如果你必须在电脑上使用其他虚拟机(例如开发 Android 应用必须使用的模拟器),请不要使用 Hyper-V!
我的电脑是win10家庭版,不能直接安装hyper-v,需要将下面的命令保存到cmd文件中:
然后在cmd文件上点击右键,选择使用管理员运行。执行完毕后会重启,在重启的过程中进行安装。
2.3 Hello world
docker服务启动的情况下,运行下面的命令:
此命令的含义是:
第一次运行时,因为本地没有ubuntu:20.04镜像,docker会自动从镜像服务器下载。下载过程可能需要多试几次,只要成功一次,以后执行就不再需要下载了。
docker官方还提供了一个hello-world镜像,可以直接运行:
此命令省略了镜像版本和运行参数,docker使用latest作为版本,即最新版本。
从hello world的例子中,也可以体验到,docker实例的运行是非常快的。
docker官方的镜像库比较慢,在进行镜像操作之前,需要将镜像源设置为国内的站点。
新建文件/etc/docker/daemon.json,输入如下内容:
然后重启docker的服务:
3.1 列出本地所有镜像
执行命令 docker images 可以查看
当前我本地只有刚才安装的两个镜像。
3.2 从镜像库中查找镜像
执行命令 docker search 镜像名称可以从docker镜像库中查找镜像。
最好选择官方(OFFICIAL)的镜像,这样的镜像最稳定一些。
3.3 下载新的镜像
执行命令docker pull 镜像名称:版本号即可下载新的镜像。
镜像下载后,就可以使用镜像来创建容器了。
4.1 启动容器
执行命令docker run即可启动容器,也就是创建某个镜像的实例。docker run命令非常复杂,可以先执行一个docker run --help来查看帮助:
比如我们要执行python的shell,需要添加-it参数,即:docker run -it python:3.8
4.2 将宿主机的文件挂载到容器
docker容器与宿主机是隔离的,要想让容器内的程序能访问宿主机上的文件,需要通过-v参数将宿主机的文件挂载到容器中。
比如我们在宿主机上有一个hello.py,可以打印hello,想要在python容器中执行,就需要进行挂载。-v后还需要接两个参数,分别是宿主机的目录和容器内的目录,两者使用:分隔,路径必须都是绝对路径。
我的hello.py保存在主目录的/docker_test目录中,将这个目录挂载到容器的/docker_test目录,然后在容器内执行python /docker_test/hello.py:
4.3 容器的端口映射
我们修改一下hello.py,创建一个socket服务端,并监听5000端口,当有客户端连接时,打印客户端的地址,先客户端发送hello,然后关闭连接:
在容器内执行:
接下来,尝试用telnet命令连接,结果却是失败的。原因是,127.0.0.1是宿主机的ip地址,5000是容器的端口,这与我们的习惯稍微有些不同。事实上,docker的容器是非常轻量的,它并没有自己的网络,要想访问容器的端口,需要进行端口映射,将容器的某端口映射到宿主机的端口,客户端连接时,只要与宿主机的端口进行连接就可以了。
需要注意的是,上面的代码创建的服务器,无论如何也不可能被客户端连接,因为代码中绑定了127.0.0.1的ip,在容器中运行时,需要绑定所有ip,即0.0.0.0。
然后,再使用-p参数,-p还需要三个参数,即宿主机的ip地址、宿主机的端口、容器的端口,三者之间使用:分隔。一般的,可以将宿主机的ip地址省略,只写宿主机的端口:容器的端口即可。
这样,就将容器的5000端口映射到了宿主机的5001端口,使用:
即可与容器中的服务器进行连接。
4.4 容器管理
上面的服务运行之后,可以使用docker ps命令,查看运行中的容器:
显示的内容有下面几列:
要想结束容器,可以使用docker kill 容器ID命令。
一般而言,当我们的程序开发完成后,会连同程序文件与运行环境一起制作成一个新的镜像。
要制作镜像,需要编写Dockerfile。DockeFile由多个命令组成,常用的命令有:
注意,Docker镜像中有一个层的概念,每执行一个RUN命令,就会创建一个层,层过多会导致镜像文件体积增大。尽量在RUN命令中使用&&连接多条shell命令,减少RUN命令的个数,可以有效减小镜像文件的体积。
5.1 自制显示文本文件内容镜像
编写cat.py,接收一个文件名,由python读取文件并显示文件的内容:
这个例子比较简单,缩写Dockerfile如下:
这个Dockerfile的含义是:
需要说明的是,ENTRYPOINT有两种写法:
这里采用第二种写法,是因为我们要在外部给容器传递参数。执行命令编译Docker镜像:
这个命令中,-t的含义是目标,即生成的镜像名为hello,版本号为1.0,别忘了最后那个.,这叫到上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
这样,我们的第一个镜像就制作完成了,使用下面的命令执行它:
即可看到~/docker_test/cat/files/test.txt的内容。
5.2 自制web服务器镜像
我们使用tornado开发一个网站,而python的官方镜像是没有tornado库的,这就需要在制作镜像时进行安装。
测试的ws.py如下:
编写Dockerfile文件如下:
在此我们验证一下CMD与ENTRYPOINT的区别。在Dockerfile所在有目录下执行如下命令:
执行完成后,再使用docker images使用就可以看到生成的镜像了,然后使用下面的命令运行:
在浏览器中输入宿主机的ip和8000端口,就可以看到页面了。
在这个例子中,我使用的运行命令是CMD,如果在docker run中指定的其他的命令,此命令就不会被执行,如:
此时,容器中被执行的是python命令,而不是我们的服务。在更多情况下,我们希望在docker run命令中为我们的服务传参,而不是覆盖执行命令,那么,我们应该使用ENTRYPOINT而不是CMD:
上面这种写法,是不支持传递参数的,ENTRYPOINT和CMD还支持另一种写法:
使用这种写法,docker run命令中的参数才可以传递给hello.py:
这个命令中,--port=9000被作为参数传递到hello.py中,因此容器内的端口就成了9000。
在生产环境中运行时,不会使用-it选项,而是使用-d选项,让容器在后台运行:
这种方式下,即使当前的控制台被关闭,该容器也不会停止。
5.3 自制apscheduler服务镜像
接下来,制作一个使用apscheduler编写的服务镜像,代码如下:
Dockerfile也是信手拈来:
生成镜像:
应该可以运行了,文件复制需要两个目录,在运行时,可以使用两次-v来挂载不同的目录:
前面用到的官方python镜像大小足足882MB,在这个基础上,再安装用到的第三方库,添加项目需要的等资源,大小很容易就超过1个G,这么大的镜像,网络传给客户非常的不方便,因此,减小镜像的体积是非常必要的工作。
docker hub上有个一python:3.8-alpine镜像,大小只有44.5MB。之所以小,是因为alpine是一个采用了busybox架构的操作系统,一般用于嵌入式应用。我尝试使用这个镜像,发现安装一般的库还好,但如果想安装numpy等就会困难重重,甚至网上都找不到解决方案。
还是很回到基本的路线上来,主流的操作系统镜像,ubuntu的大小为72.9MB,centos的大小为209MB——这也算是我更喜欢使用ubuntu的一个重要原因吧!使用ubuntu作为基础镜像,安装python后的大小为139MB,再安装pip后的大小一下子上升到了407MB,要是再安装点其他东西,很容易就赶上或超过python官方镜像的大小了。
看来,寻常路线是很难压缩镜像文件体积了。幸好,还有一条曲线救国的路可走,这就是多阶段构建法。
多阶段构建的思想其实很简单,先构建一个大而全的镜像,然后只把镜像中有用的部分拿出来,放在一个新的镜像里。在我们的场景下,pip只在构建镜像的过程中需要,而对运行我们的程序却一点用处也没有。我们只需要安装pip,再用pip安装第三方库,然后将第三方库从这个镜像中复制到一个只有python,没有pip的镜像中,这样,pip占用的268MB空间就可以被节省出来了。
1、在ubuntu镜像的基础上安装python:
然后运行:
这样,就生成了python:3.8-ubuntu镜像。
2、在python:3.8-ubuntu的基础上安装pip:
然后运行:
这样,就生成了python:3.8-ubuntu-pip镜像。
3、多阶段构建目标镜像:
这个dockerfile需要解释一下了,因为它有两个FROM命令。
第一个是以python:3.8-ubuntu-pip镜像为基础,安装numpy,当然,在实际应用中,把所有用到的第三方库出写在这里。
第二个FROM是以FROM python:3.8-ubuntu镜像为基础,将第三方库统统复制过来,COPY命令后的–from=0的意思是从第0阶段进行复制。实际应用中再从上下文中复制程序代码,添加需要的ENTRYPOINT等。
最后,再运行:
这然,用于我们项目的镜像就做好了。比使用官方python镜像构建的版本,小了大约750MB。
到此,我们的镜像已经制作好了,可是,镜像文件在哪,如何在生产环境下运行呢?
刚才使用docker images命令时,已经看到了生成的镜像:
我们可以使用docker save命令将镜像保存到指定的文件中,保存的文件是一个.tar格式的压缩文件:
将hello.tar复制到生产环境的机器上,然后执行导入命令:
就可以使用了。
Windows Server 2019 Core(4)-安装Docker
安装 系统环境
硬件型号: ThinkPad T520
系统版本: ubuntu 14.04
CPU: i7
RAM: 8G
添加软件源
由于Ubuntu源中的最先版本为0.9无法满足要求,所以需要使用Docker的官方源
添加密钥:
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80
--recv-keys \
36A1D7869245C8950F966E92D8576A8BA88D21E9
源地址: deb docker main
添加源可以通过"软件和更新->其它软件->添加"来操作
添加后执行如下命令:
$ sudo apt-get update
$ sudo apt-get install lxc-docker-1.1.1
注: 官方给出的源地址为https连接的,但是总是出现ssl验证失败的错误,最后改为非
ssl连接之后正常
测试
执行如下命令获取容器镜像,创建一个实例并打开一个实例shell
$ sudo docker run -t -i centos:latest /bin/bash
注:第一次运行由于需要下载镜像可能需要多等一会儿
运行成功后会有一个新的shell提示符
制作镜像 要求
web容器安装Nginx+PHP服务
数据库容器安装Mysql服务
web服务和数据库分离
web服务容器可以访问数据库容器
制作nginx+php镜像
启动一个容器实例:
$ sudo docker run -t -i centos:latest /bin/bash
安装nginx与PHP:
Nginx可以使用源码或rpm包进行安装,PHP可以使用源码或yum安装.具体安装和配置这里
不进行具体讲述.
注:需要把nginx与php-fpm添加到系统服务中并设置开机启动
我设置的站点根目录为/opt/web
退出shell并执行如下命令制作镜像:
$ sudo docker commit -m="web service image nginx+php" -a="username" \
sudo docker ps -lq username/web:v1
这是一个组合命令:
sudo docker commit根据已有实例制作镜像
sudo docker ps -lq返回最后一个运行的实例id
已有镜像可以使用sudo docker images 查看
至此创建了第一个镜像 username/web:v1
制作mysql镜像
启动实例:
$ sudo docker run -t -i centos:latest /bin/bash
安装Mysql.
设置Mysql服务开机启动:
$ chkconfig mysqld on
启动mysql.
修改mysql登陆权限:
mysql> grant all privileges on . to 'root'@'%'
identified by 'dbpasswd';
mysql> flush privileges;
mysql服务默认只能本地连接,制作镜像的时候需要注意.否则是无法连接到数据库的.
退出shell并执行如下命令制作mysql容器镜像:
$ sudo docker commit -m="mysql service image" -a="username" \
sudo docker ps -lq username/mysql:v1
清除不再需要的实例:
$ sudo docker rm sudo docker ps -aq
启动并关联实例
web实例依赖与mysql,所以先打开一个mysql实例:
$ sudo docker run -d --name db username/mysql:v1
/sbin/init
-d参数是让实例以dameon的形式运行. /sbin/init是创建实例后执行的操作,此处为初
始化系统服务,包括运行mysql.
启动web实例并与数据库实例进行关联:
$ sudo docker run -d --name web --link db:db -p 8080:80 -v /path/to/src:/opt/web username/web:v1 /sbin/init
--link参数设置关联的容器,可以设置多个.关联之后会自动更新web容器的host,把db
的地址指向到数据库容器的地址.
-p 参数用来进行ip映射.此处把容器的80端口映射到了本地的8080端口.web服务可是
通过localhost:8080访问.
-v 参数把数据挂载到容器指定目录.此处为把站点源码目录挂载到容器的站点目录.
在web容器中访问数据库容器的mysql服务可以使用db这个主机地址.
请先以管理员身份打开PowerShell窗口
一台新的服务器,或是没有装过Docker,需要先安装一些Windows功能
(可以通过添加角色与功能界面安装,也可以通过PowerShell安装)
然后安装Docker,可以选择正式版,也可以选择预览版
正式版
安装成功,显示
如看到以下提示,请重启一次服务器
预览版
安装成功,显示:
( AVMA微软官方文档 )
1.切换内核
安装完后,默认为Windows内核容器,可手工切换至Linux内核容器,但个人认为意义并不大,完全可以在服务器上通过Hyper-V管理器安装一个Linux虚拟机,在虚拟机内跑Linux下的Docker,实现同时拥有两种内核的Docker服务,然后再通过Docker自带的Swarm进行统一管理,但混合部署情况下需配置 Docker对象标签 ,具体配置可查看微软官方文档( Linux+Windows 混合操作系统群集 )。
2.其它命令
3.其它参考
Docker对象标签
创建ActiveDirectory
4.官方镜像地址
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。