windows和linux双系统的最佳结合,好物推荐:Docker For Desktop

2020-06-11 21:41:37 25点赞 132收藏 6评论

想用Linux但又离不开windows咋办?Docker For Desktop:是时候学习Docker了。

Docker的官方概念就不说了,相关的资料很多,如果不了解那就先去网上了解一下吧,这次我将从个人使用的角度去入门,从具体实用的角度去说这个Dokcer,而不去长篇大论讲一些概念。

前提

本文是基于windows环境下使用docker的学习文章

其实我也有很长的一段时期在ubuntu系统下开发,很喜欢linux系统的纯净方便,但是当你身边同事都是使用windows与你交流沟通传输资料的时候,使用linux系统开发倒是一件不方便的事情,再加上领导曾说了一句你用windows吧别和同事们不一样,然后我就一直使用windows了,不过也一直想着回到linux系统的怀抱下,双系统虚拟机都试过,直到遇到了Docker我才意识到这不就是我一直寻找的windows和linux完美共存的方案么!

Docker能干什么?

张三是个程序员,平时开发需要安装各种软件,这次开发的项目需要Redis,没有Docker之前张三需要先去官网下载Redis,然后发现官网没有window版本,再几经搜索在github找到了redis for windows,然后又因为github网络的问题,缓慢下载下下来,再解压到某个目录,然后执行启动服务命令.有了Docker之后,直接执行一条docker run命令,即可成功,另外开发中还会需要安装不同版本的mysql,如果直接装到本机上,首先多个mysql都可能要在系统中注册服务,配置和环境要隔离出来,卸载的时候也比较麻烦,,如果使用docker直接根据版本拉取镜像,绑定端口运行即可,不需要的时候直接删掉容器即可

李四也是程序员,平时需要在linux系统下做一些编译或者测试,但是因为公司的原因要装各种window独占的通讯软件,外加李四偶尔还想玩个CS:GO,所以他想在window和linux之间无缝切换,最一开始李四想到的是买两台笔电,这种想法想想就行了,后来又想到装双系统,双系统切换在于要重启太不方便,又想到装vmware虚拟机,vmware其实差不多可以满足李四的想法了,但是vmware太占内存了,最终李四选择了在window上使用Docker,需要linux的时候直接run一个linux系统的镜像即可,linux系统手到擒来,轻量快速都是vmware不可比的

王五还是一个程序员,不过他的工作稍多一些,平时需要部署项目在测试服务器上,没有docker之前,王五先打包然后手动复制到服务器上,然后进入对应目录,执行命令启动项目,有了docker之后,王五打包项目的时候程序就会将镜像推动到仓库中,然后通过可视化界面或服务器命令重新拉取重启项目即可,并且出现问题之后可以通过tag快速回退启动上一个版本,后来王五又偷懒了,在上边的基础集成了自动化,直接提交代码,服务器自动构建部署运行

林六又是一个程序员,他搭建了一套比较复杂的程序,程序依赖很多服务,同时还有很多配置,每次给别人演示安装的时候他都需要忙活半天去搭建环境,最后还不一定能成功,这样时候他总挠挠头说,在我机子上真能运行,有了docker之后,他把一系列程序通过打成一个docker镜像,在给别人演示的时候,只要先安装上docker,然后拉取他的镜像就可以了

以上都是docker在个人开发上提高效率的案例,我认为学习docker最好就是把docker应用到实际开发生活中来,这样才能更快更好的理解Docker,下面就基于windows环境开始学习如何使用Docker

安装Docker

系统准备

电脑性能别太差了不然毫无体验,检查windows版本是否为企业版或专业版,并开启Hyper-v


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


程序下载

Windows 10以上,去官网下载Docker Desktop,,目前Docker Desktop的体验非常好,Windows 10以下建议升级win10


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


注册docker hub的账号(仅作登录Docker Desktop使用),安装完成后需要登录Docker,在CMD中运行docker -v 出现版本号即为成功


切换容器类型

下载完成后需要切换成Linux容器类型,右键docker托盘图标,选择Switch to Linux containers,因为我已经转换过了,所以这里是Switch to Windows containers


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop



镜像源修改

我是用的是阿里云的镜像源,需要去阿里云注册账号,然后在镜像加速中查看你的加速器地址


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop



windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


修改源地址,右键docker托盘图标->setting->然后按照如图修改加速源,最后点击 apply&restart 即可


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop



开始Docker

基本概念

镜像(Image):一个文件,里面存放着程序以及运行方式

容器(Container):镜像运行的实体

仓库(Repository):镜像仓库

标签(Tag):标识着镜像的版本

搜索镜像

镜像的查找可通过docker search命令,请在window的cmd窗口或powershell中,不建议在git bash中使用,因为在git bash中会有错误提示

C:Usersxxxx>docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that… 8245 [OK]
bitnami/redis Bitnami Redis Docker Image 147 [OK]
sameersbn/redis 80 [OK]
grokzen/redis-cluster Redis cluster 3.0, 3.2, 4.0, 5.0, 6.0 68
......

然后可以根据DESCRIPTION通过NAME选择镜像,推荐下载第一个,一般都是官方源关于镜像的下载: 启动一个镜像的时候,如果镜像不存在,则会先进行pull(下载)操作,你也可以主动pull,这样docker会把镜像下载本机,启动的时候则无需再次下载

docker pull redis


安装Redis

docker run -d --name redis -p 6379:6379 redis

run 创建一个新的容器并运行一个命令-d 后台运行容器,并返回容器ID,如果不加这个,程序将以前台启动,一旦关闭程序也将自动关闭--name 给容器指定一个名称,建议加,方便以后维护-p 使用方法: [-p 宿主机端口:容器内端口] 说明: 指定端口映射,因为默认情况下容器的网络与宿主机不互通,通过该参数可把redis的6379端口映射到本机6379端口上

安装两个Mysql

mysql5.6

C:Usersxxxxx>docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9587 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3486 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 702 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 76
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 69
centurylink/mysql Image containing mysql. Optimized to be link… 61 [OK]

比如我们想安装mysql5.6的版本,通过search我们也无法得知mysql的具体版本,,最简单的方法就是去官方hub上查阅,访问https://hub.docker.com/_/mysql?tab=tags,,(也可以使用命令的方式去查找版本号,不过这个需要安装脚本,以后再说)


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop



windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


这里先下载mysql5.6的镜像

docker pull mysql:5.6


5.6 , 5.7就是镜像的tag,tag可以理解为镜像的名字,如果不加tag,则会下载tag为latest的镜像

通过镜像的Description,得知我们需要指定MYSQL_ROOT_PASSWORD才能运行mysql5.6


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


docker run -d --name mysql56 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:5.6

-e 设置环境变量,至于都有什么环境变量供我们去设置,可以通过查阅hub官网的Description标签页可以得知

mysql5.7

因为安装mysql5.6已经讲宿主机的3306端口分配了,所以需要指定一个新的端口

docker pull mysql:5.7
docker run -d --name mysql57 -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 mysql:5.7


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


卸载mysql5.6

可视化操作的话,右键docker托盘图标->Dashboard


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


命令操作

docker stop mysql56
docker rm mysql56

stop 停止一个运行中的容器

rm 删除一个停止的容器

docker rm -f mysql57

-f 默认情况下 rm 无法删除正在运行的容器,加 -f 即可强制删除

后面追加容器id或容器name,因为上面我们通过--name指定了容器名称,所以这里直接输入即可,这也是我为什么建议加--name参数指定容器名称的原因,

如果我们忘记了容器名称呢?

查询docker容器

C:Usersxxxxx>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a7215cb11e2 redis "docker-entrypoint.s…" 6 hours ago Up 6 hours 0.0.0.0:6379->6379/tcp redis

docker ps 查询运行中的容器
docker ps -a 查询所有容器

第一列的5a7215cb11e2就是容器id(CONTAINER ID),我们也就可以使用容器id进行对容器的操作

创建两个数据,再删除两个数据库,对本机的系统没有造成任何污染,这就是Docker的优点,简直就是渣男,一旦分手忘得干干净净的

删除镜像

刚刚删除了mysql的容器,一旦再次需要mysql服务,直接run无需下载即可立马启动mysql服务,这是因为mysql的镜像依然在我们本机存储着,简直就是渣男,分手了还把对方藏在心底,这次我们要和mysql彻底决裂,那就是删除镜像

docker rmi mysql:5.6
docekr image rm mysql:5.6
#以上两条命令操作相同,rmi 是 image rm 简化版

查询本机镜像

docker image ls
docker images
#以上两条命令操作相同,images 是 image ls 简化版

安装linux系统

以安装centos为例

docker search centos
docker pull centos
docker run -d -it --name centos -v /d/dev/test:/home/test centos

文件挂载

先解释 -v /d/dev/test:/home/test ,表示将宿主机的D:/dev/test目录与容器内部的/home/test目录映射起来,在该目录下的操作的双向影响的

在这里D:/dev/test要写成/d/dev/test的形式


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


伪终端启动

接下来说 -it 是干嘛的

-i:以交互模式运行容器,通常与 -t 同时使用

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

直接说效果吧,因为容器中没有一个常驻的前置进程,前置进程运行结束后,容器便自动退出了,所以结合-d -it 就是后台启动centos 并保持一个伪终端防止centos自动关闭,也可以使用-itd

进入容器

容器已经后台启动了 ,如何进入容器?

docker exec -it centos /bin/bash

exec 在运行的容器中执行命令

-it 执行一个交互的终端

/bin/bash 选择执行的bash

exec并不是一个进入容器的命令,而是一个在运行的容器中执行命令的命令,-it标识启动了一个交互的终端,bash使用/bin/bash,所以上述命令是给了我们一个和容器内部通信的终端

更详细的区别请看 docker run 和 docker exec 的差异

文件交互

即使没有挂载了文件目录,我们还是可以通过命令用来复制传输容器文件

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

将主机/d/dev/test2目录拷贝到容器centos的/home目录下。
docker cp D:/dev/test2/ centos:/home/

将容器centos的/home/test3目录拷贝到主机的D:/dev/目录中。
docker cp centos:/home/test3 D:/dev/

在这里D:/dev/test形式不要变

图形化桌面

https://www.jianshu.com/p/38a60776b28a


安装wordpress+mysql

接下来需要做的是安装两个容器wordpress和mysql,并让wordpress连接mysql数据库

分别安装

首先安装mysql

docker run -d -e MYSQL_ROOT_PASSWORD=root MYSQL_DATABASE=wordpress --name mysql57 mysql:5.7

然后安装wordpress

docker run -d -p 80:80 --link mysql57:mysql -e WORDPRESS_DB_PASSWORD=root --name wordpress wordpress

分别执行以上两条命令,然后访问localhost:80即可打开wordpress安装界面


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


首先解释一下两条命令

docker run -d -e MYSQL_ROOT_PASSWORD=root MYSQL_DATABASE=wordpress --name mysql57 mysql:5.7
# 启动了一个名为mysql57的容器,并初始化创建数据库wordpress
docker run -d -p 80:80 --link mysql57:mysql_host -e WORDPRESS_DB_PASSWORD=root -e WORDPRESS_DB_HOST=mysql_host --name wordpress wordpress
#启动wordpress容器,link命令链接mysql57容器将它命名为mysql_host,然后指定数据库的密码为root,wordpress启动成功后将会自动连接mysql57容器的wordpress表

命令是简洁的,两条命令就立马启动好一个wordpress,作为一个新手的我在感慨的时候也是懵逼的,因为我心中想的是:

为什么要这么配置? 为什么是这么配置的?

其实这一点不仅仅是作为一个docker入门学习的痛点,很多技术学习也都是这样的,既学习的方式都是狼吞虎咽不咀嚼的,学习docker就把常用命令记了下来,在安装某个容器的时候去百度一下安装命令,安装上就完事了,以为自己掌握了,然而下次换了一个新的容器的时候,还是要去网上搜索什么docker xxxx 安装 这样的关键词,所以我们要会举一反三,知其所以然

1 docker学习是可以通过博客文章入门的,可以让你有迅速的了解

2 继续提升是离不开官网文档的,这样才能了解最新的docker 命令的含义以及参数,有些文章可能已经过时不再支持

3 了解镜像的详细配置请翻阅 docker hub 镜像的详情页,在那里你能找到绝大多数的配置参数

4 学会结合inspect命令查看镜像启动的方式,以及进入容器阅读具体的启动脚本

其实前三点都已经讲过了,前三点几乎可以整合启动所有的镜像,第四点的使用稍后再说

docker run -d -e MYSQL_ROOT_PASSWORD=root MYSQL_DATABASE=wordpress --name mysql57 mysql:5.7
# 启动了一个名为mysql57的容器,并初始化创建数据库wordpress
docker run -d -p 80:80 --link mysql57:mysql_host -e WORDPRESS_DB_PASSWORD=root -e WORDPRESS_DB_HOST=mysql_host --name wordpress wordpress
#启动wordpress容器,link命令链接mysql57容器将它命名为mysql_host,然后指定数据库的密码为root,wordpress启动成功后将会自动连接mysql57容器的wordpress表

再看这里,link命令链接mysql57容器将它命名为mysql_host,可以理解为在wordpress容器中通过访问 http://mysql_host:3306 ,即可访问mysql57容器的数据库服务,这里的mysql_host就代表mysql57的ip

docker 网络类型

使用docker network ls 查看当前网络列表

目前(Docker v18.03),Docker Engine内置支持如下几种类型的网络。

host类型

host网络就是Docker宿主机的网络,是Docker Engine启动即默认创建的网络之一。加入到该网络中的所有容器实例,容器实例与容器宿主机之间没有网络隔离,所以容器实例都直接使用宿主机的网络,拥有与宿主机一样的IP,使用的是宿主机的端口。(目前仅支持linux ,windows mac 不支持,2020-06-07,未来可能支持)

bridge类型

Docker Engine启动即默认创建的网络之一。bridge网络的网络驱动器为bridge,即-d=bridge。

该网络支持在同一个宿主机上的各个容器实例之间的通信。bridge网络是一个独立的网络空间,在网络空间内部的各个容器实例能够直接通信。各个容器实例都是连接到一个网桥,即docker0。新创建的容器实例默认就会加入bridge网络,即容器实例默认连接到docker0。创建容器实例可以通过使用--network指定加入到其他已有的网络。

也可以另外创建一个定制的bridge网络,创建的bridge网络会覆盖默认的bridge网络。默认的bridge网络不支持服务的DNS自动发现,即一个容器实例要通过容器实例的name找到容器实例的IP,就无法使用该网络。定制的bridge网络,最大的好处是默认即支持服务的自动发现。

overlay类型

overlay类型的网络的网络驱动器为overlay,即-d=overlay。该类型的网络适用于Docker宿主机集群中的各个独立的容器实例之间通信。为集群中的Docker容器实例提供跨多个Docker Engine的网络连接。

macvlan类型

macvlan类型的网络的网络驱动器为macvlan,即-d=macvlan。该类型的网络适用于容器实例需要与宿主机的MAC地址直接通信,无需端口映射,也无需NAT,容器实例的eth0直接与宿主机的物理网卡通信。容器实例可以被赋予公共IP,并从宿主机外部直接访问。

none类型

none网络是一个完全隔离的自治网络,甚至与Docker宿主机的网络都不通,必须手工配置网卡后才能够使用。


使用docker-compose

启动这个wordpress要两条命令,并且还要配置,有没有更简单的方法呢? 使用docker-compose !

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 就是一个一键启动脚本

新增docker-compose.yml文件,复制内容如下

mysql:
container_name: mysql
image: mysql:5.7
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=wordpress

web:
container_name: wordpress
image: wordpress
links:
- "mysql:mysql_host"
ports:
- "80:80"
environment:
- WORDPRESS_DB_HOST=mysql_host
- WORDPRESS_DB_PASSWORD=root

以上就是两条命令的整合脚本,在对应目录下启动

docker-compose up -d #后台启动脚本


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


两个镜像就会作为一组同时被启动起来了


windows和linux双系统的最佳结合,好物推荐:Docker For Desktop


关闭

docker-compose down

关于docker-compose在此就不做详细解释了,以后另开文章详细说明

使用image

最简单的就是使用别人做好的wordpress mysql整合包,当然这是别人做好了,所以我们才能直接用,如果没有,还是需要我们自己动手的,这里也就不说了

用法总结

docker search
docker pull
docker run
docker ps
docker start
docker stop
docker rm
docker cp
docker image ls
docker image rm
docker-compose up -d
docker-compose down
docker exec


下一篇待讲

docker network 镜像之间的网络通信

docker volume 使用volume保存镜像数据

docker build 如何使用dockerfile构建镜像,以及dockerfile语法

docker import/export 导入导出镜像文件

docker tag 给镜像打标签

docker push 搭建私库并推送镜像进行部署

docker swarm docker集群环境的设置



展开 收起

JINGDONG 京东 健康甄选 超声波洁牙套餐 单人洁牙+抛光

JINGDONG 京东 健康甄选 超声波洁牙套餐 单人洁牙+抛光

89元起

宝满 WPS2019视频教程 表格文字演示word/excel/ppt办公office在线课程

宝满 WPS2019视频教程 表格文字演示word/excel/ppt办公office在线课程

暂无报价

苏曼网校 Word2016 从入门到精通 视频教程

苏曼网校 Word2016 从入门到精通 视频教程

暂无报价

Photoshop cc2018 全套速成 入门视频课程

Photoshop cc2018 全套速成 入门视频课程

暂无报价

Photoshop CC 全套入门 自学视频课程

Photoshop CC 全套入门 自学视频课程

暂无报价

CAD2019 零基础入门到精通 全套视频课程

CAD2019 零基础入门到精通 全套视频课程

暂无报价

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【11.11专享学霸班】

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【11.11专享学霸班】

暂无报价

PPT office2016 全套 视频课程

PPT office2016 全套 视频课程

暂无报价

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【全额奖学金班】

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【全额奖学金班】

暂无报价

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【特惠班】

沪江网校 微软MOS认证专业级Word+Excel+PPT(13版)【特惠班】

暂无报价

photoshop cc 广告平面设计在线课程

photoshop cc 广告平面设计在线课程

暂无报价

AutoCAD 室内设计 全套基础基础入门 视频课程

AutoCAD 室内设计 全套基础基础入门 视频课程

暂无报价

PS零基础 全套案例 视频课程

PS零基础 全套案例 视频课程

暂无报价

圈外同学 IDP职业发展规划课

圈外同学 IDP职业发展规划课

暂无报价

CAD2019 机械制图 机械设计制图

CAD2019 机械制图 机械设计制图

暂无报价

Photoshop cs6 平面设计零基础入门 自学基础班 视频课程

Photoshop cs6 平面设计零基础入门 自学基础班 视频课程

暂无报价
6评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
132
扫一下,分享更方便,购买更轻松