この記事では、win10 に docker をインストールして使用する方法に関する関連知識を提供します。お役に立てば幸いです。
1.Docker のインストール
##次に、コンピュータのコントロール パネルに入り、[プログラム] > [Windows 機能の有効化またはオフ] > [Hyper-v] にチェックを入れて有効にします。コンピュータが再起動します。 、後で Docker for Windows をダウンロードしてインストールできます。
起動後、デスクトップの右下に表示され、マウスを置くと「Docker is running」と表示されます。起動は成功しました。最初のインストールとアクティベーション後にポップアップが表示されるようです。Docker Cloud のログイン インターフェース、登録してログイン、使い方は git に似ており、イメージなどをプルできます。
2. docker の使用開始
バージョン情報を確認し、docker コマンドが機能していることを確認します。
# docker run hello-world を実行して、Docker Hub からのプルをテストします。 イメージを取得してコンテナーを開始します。
#コマンド docker run -it ubuntu bash を使用して、Ubuntu コンテナーを実行します。このコンテナーは以前にプルしたことがありますが、おそらく数十メガなので、直接有効にします。exit コマンドを入力してコンテナーを停止します
コンテナとイメージを停止または削除します。 Web サーバーを停止する場合は、「docker stop webserver」と入力してから、docker start webserver を再起動します。実行中のコンテナーを 1 つのコマンドで停止および削除するには、「docker rm -f webserver」と入力します。これによりコンテナは削除されますが、nginx イメージは削除されません。ローカル イメージの docker イメージを一覧表示できます。再度 Docker Hub から取得する必要がないように、いくつかのイメージを保持しておきたい場合があります。不要になったイメージを削除するには、docker rmi の後にイメージ ID またはイメージ名を指定します。たとえば、 docker rmi nginx
が返されます。リモート署名済み。 または、現在のユーザーに対してのみモジュールをインストールするには、次のように入力します。
if (-Not (Test-Path $PROFILE)) { New-Item $PROFILE –Type File –Force}Add-Content $PROFILE "`nImport-Module posh-docker"
$PROFILE# が作成されます## ファイルが存在しない場合は、次の行をファイルに追加します: Import-Module posh-docker
ファイルが正しく作成されたかどうかを確認するか、単に手動で編集するには、次のように入力します。 PowerShell では次のようになります。
Notepad $PROFILE
新しい PowerShell セッションを開きます。 start、stop、run などの Docker コマンドとそのオプション、コンテナー名やイメージ名は、最初の数文字を入力した後に Tab キーを押すとオートコンプリートされるようになりました。
これらのポータブル イメージは、Dockerfile と呼ばれるものによって定義されます
3 つのファイルの内容は次のように設計されています:
1.Dockerfile:# Use an official Python runtime as a parent imageFROM python:2.7-slim# Set the working directory to /appWORKDIR /app# Copy the current directory contents into the container at /appADD . /app# Install any needed packages specified in requirements.txtRUN pip install --trusted-host pypi.python.org -r requirements.txt# Make port 80 available to the world outside this containerEXPOSE 80# Define environment variableENV NAME World# Run app.py when the container launchesCMD ["python", "app.py"]2.app.py: from flask import Flask from redis import Redis, RedisError import os import socket# Connect to Redisredis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)app = Flask(__name__)@app.route("/")def hello(): try: visits = redis.incr("counter") except RedisError: visits = "<i>cannot connect to Redis, counter disabled</i>" html = "<h3>Hello {name}!</h3>" \ "<b>Hostname:</b> {hostname}<br>" \ "<b>Visits:</b> {visits}" return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)if __name__ == "__main__": app.run(host='0.0.0.0', port=80)3. requirements.txt: Flask Redis
在docker目录下打开cmd.exe运行命令(确保能够找到Dockerfile文件,镜像取名叫friendlyhello): docker build -t friendlyhello .
ps:千万不要落了上面那行后面的那个点,曾经入过坑的。。命令包括后面的那个点
然后再执行命令:
docker images
运行镜像程序:
docker run -p 4000:80 friendlyhello
可以看到Python正在为应用程序提供消息的http://0.0.0.0:80。但是,这个消息来自容器内部,它不知道我们将该容器的端口80映射到4000,从而打开URL: http://localhost:4000
首先在接着上面的操作步骤后按下ctrl+c在终端退出,这并不意味着镜像停止运行了
键入docker container ls 列出正在运行的容器
运行命令: docker container stop <container name or id></container>
停止容器。否则,在下一步中重新运行容器时,将会收到错误响应。
前面已经说过了,docker和git的操作有类似之处,所以docker也
有远程仓库,如果前面已经注册过并登录了docker cloud,那么
访问网址:https://hub.docker.com 在里面创建存储库,否则先
注册吧。
前面在本地创建了一个friendlyhello的镜像,现在要把它push到
自己的docker hub的存储库中去,首先:
1. 登录docker hub (我已经登录过了。。再登录一次吧)
2. 标记镜像:
把镜像放入wangliguo存储库并标记为test
3. 查看镜像:
4. 发布镜像(推送镜像)
5. Docker Hub上查看镜像:
6. 从远程存储库中提取并运行镜像:现在当远程存储库有了镜像后,就可以从远程存储库提取并运行了
在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,想象一个视频共享站点,它可能包括用于将应用程序数据存储在数据库中的服务,用于用户上传东西的视频转码服务,为前端服务等等。
服务实际上只是“生产中的容器”。服务只运行一个镜像,但它编码镜像运行的方式 - 应该使用哪个端口,容器应该运行多少个副本,以便服务具有所需的容量,以及等等。缩放服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多的计算资源。
使用Docker平台定义,运行和扩展服务非常简单 - 只需编写一个docker-compose.yml文件即可。
键入:
version: "3"services: web: # replace username/repo:tag with your name and image details image: 15433/wangliguo:test deploy: replicas: 5 resources: limits: cpus: "0.1" memory: 50M restart_policy: condition: on-failure ports: - "80:80" networks: - webnet networks: webnet:
拉取的是上个步骤中的存储库的tag。
运行该镜像的5个实例作为一个服务调用web,限制每个使用,最多10%的CPU(跨所有核心)和50MB的RAM。
如果一个失败,立即重新启动容器。
将主机上的端口80映射到web端口80。
指导web容器通过一个负载平衡的网络共享80端口webnet。(在内部,容器本身将web在临时端口上发布到 端口80)。
webnet使用默认设置(这是一个负载平衡覆盖网络)定义网络。
先运行命令:docker swarm init
然后再运行命令:docker stack deploy -c docker-compose.yml getstartedlab
给它取名叫getstartedlab
服务堆栈在这台主机上运行了5个部署镜像的容器实例
运行命令查看:docker service ls
在服务中运行的单个容器称为任务,可以看到上面有个getstartedlab_web的服务
运行命令docker service ps getstartedlab_web 查看此服务下的任务:
如果只列出系统中的所有容器,也会显示任务,但不会被服务过滤:
运行命令:docker container ls -q
然后打开浏览器,键入http://localhost
点击刷新多次,可以发现Hostname的更改,以循环方式选择5个任务中的一个来响应。容器ID将与前一个命令(docker container ls -q)的输出相匹配。
比如更改docker-compose.yml中的replicas值,保存更改并重新运行docker stack deploy命令来更新应用程序:
运行命令:
docker stack deploy -c docker-compose.yml getstartedlab
Docker会做一个就地更新,然后重新运行docker container ls -q以查看重新配置的已部署实例
可以看到之前是6个,现在是7个,刚好多了一个任务
ps:电脑中还运行这之前步骤中从docker hub中拉取并运行着的那个任务,所以会看到6个和7个
アプリケーション docker stack rm getstartedlab を閉じる
グループ docker swarm Leave –force を閉じる
これで、サービス内のすべてのタスクが閉じられ、次のコマンドを実行します。
dockercontainer ls -q
これは、前の手順で Docker Hub から取得して実行したものです。そのタスク
swarm は、Docker を実行してクラスターに参加するマシンのグループです。ただし、今後はクラスター マネージャーによってクラスター上で実行されるようになります。 swarm 内のマシンは物理マシンでも仮想マシンでもかまいません。グループに参加すると、それらはノードと呼ばれます。
Swarm マネージャーは、最も使用されていないマシンをコンテナーで埋める「最も空のノード」など、いくつかの戦略を使用してコンテナーを実行できます。または「グローバル」。各マシンが特定のコンテナーのインスタンスを 1 つだけ取得するようにします。 Compose ファイルでこれらのポリシーを使用するように swarm マネージャーに指示できます。
グループ マネージャーは、コマンドを実行できる、または他のマシンがワーカーとしてグループに参加することを許可できる、グループ内の唯一のマシンです。ワーカーは機能を提供しますが、他のマシンに何ができるか、何ができないかを指示する権限はありません。
これまで、Docker はローカル マシン上のシングルホスト モードで使用されてきました。ただし、Docker はクラスター モードに切り替えることもできるため、クラスタリングが使用されます。 swarm モードを有効にすると、現在のマシンが swarm マネージャーになります。 Docker は、現在のマシンだけでなく、管理しているクラスター上で実行されたコマンドを実行します。
クラスターは、物理マシンまたは仮想マシンの複数のノードで構成されます。基本的な概念は単純です。 docker swarm init を実行して swarm モードを有効にし、現在のマシンを swarm マネージャーにし、次に他のマシンで docker swarm join を実行して swarm にワーカーとして参加します。以下では、仮想マシンを使用して 2 台のマシンのクラスターをすばやく作成し、それをクラスターに変換します。
手順:
1. 管理者として cmd.exe を実行します。これは管理者が実行する必要があります。そうでないと、後続の操作の権限が十分ではありません。
2. docker を実行します。 swarm init を使用して swarm モードを有効にすると、現在のマシンが swarm マネージャーになり、他のマシンで docker swarm join が実行され、他のマシンがワーカーとして swarm に参加できるようになります。
3. Hyper-V マネージャーを起動します。
「スタート」→「Windows 管理ツール」→「Hyper-V マネージャー」をクリックします。
4. 右側のメニューで「仮想スイッチ マネージャー」## をクリックします。
# 5. [外部ネットワーク タイプの仮想スイッチを作成する] をクリックし、myswitch という名前を付けて、[ホストのアクティブなネットワーク アダプターを共有する] チェックボックスをオンにします。
6. ノードを使用する 管理ツールは複数の仮想マシンを作成します。 docker-machine:
docker-machine create -d hyperv –hyperv-virtual-switch "myswitch" myvm1
docker-machine create -d hyperv –hyperv-virtual-switch "myswitch" myvm2
これらは以前に作成したので、さらに 2 つ作成します: myvm3 と myvm4
docker-machine create -d hyperv –hyperv-virtual-switch “myswitch” myvm3
docker-machine create -d hyperv –hyperv-virtual-switch "myswitch" myvm4
7. これで、それぞれ myvm3 と myvm4 という名前の 2 つの仮想マシンが作成されます。コマンド
docker-machine ls を使用してマシンをリストし、その IP アドレスを取得します。
先使用命令docker-machine ssh myvm3
然后让myvm3 成为一个管理员:docker swarm init
注意红框中的内容,这是后面的myvm4 加入集群要执行的命令
运行命令:docker node ls
可以看到myvm3 已经成为管理员了
以管理员身份再运行一个cmd.exe.然后运行命令:docker-machine ssh myvm4
然后再运行命令:(这就是上一页中图片里红框中的内容,下面的token是我这里的,正常运行到这里的时候是去myvm3的docker swarm init命令中把红框框位置里的命令复制粘贴过来执行)
docker swarm join --token SWMTKN-1-0csyw4yz6uxob90h0b8ejoimimrgisiuy9t2ugm8c1mxfvxf99-7q7w5jw1mrjk1jlri2bcgqmu8 10.211.106.194:2377
然后再切换到myvm3 的cmd.exe中执行命令:docker node ls
可以看到,我们已经创建了一个简单的集群。、
附离开群命令:docker swarm leave
docker-machine为swarm管理器配置一个shell
运行命令:docker-machine env myvm3
注意最后一行的内容
我这里是@FOR /f "tokens=*" %i IN ('docker-machine env myvm3') DO @%i
复制粘贴运行它
再运行docker-machine ls以验证它myvm3 是否为活动机器
在swarm管理器上部署应用程序
以部署我们之前docker-compose.yml服务为例
首先在这个以管理员身份打开的cmd中进入到docker-compose.yml文件的所在的目录中去,我的因为在D/docker中,如果不过来,那么执行命令:
docker stack deploy -c docker-compose.yml getstartedlab会出现:
进入目录后执行上面那条命令:
再执行命令docker stack ps getstartedlab 查看服务详情:
如果发现state存在shutdown的情况(也有可能出现你的图片上的实例数量大于你在服务文件中定义的数量的情况,这都是我爬过的坑,现在我这里定义的是6,图片上也是6,),那应该是你在之前服务哪一章运行过命令:
docker stack deploy -c docker-compose.yml getstartedlab 而没有把getstartedlab移除掉
这时应该执行命令:docker stack rm getstartedlab 把getstartedlab移除掉
Ps:我是d,c盘都执行了这个命令,因为之前运行docker stack deploy -c docker-compose.yml getstartedlab命令是在d盘的时候
然后重新运行:docker stack deploy -c docker-compose.yml getstartedlab 和
docker stack ps getstartedlab 就好了
浏览器访问集群的网址:
如图红框框所示,浏览器上访问其中的任何一个,然后刷新,将看到6个可能的容器ID,它们都是随机循环的,展示了负载平衡
比如说如果修改了docker-compose.yml文件后,执行命令: docker stack deploy -c docker-compose.yml getstartedlab 再次运行以部署这些更改即可 比如说前面提到的移除应用程序:docker stack rm getstartedlab 离开群:docker swarm leave –force 重新启动已停止的虚拟机,执行: docker-machine start <machine-name></machine-name>
推奨学習: 「docker ビデオ チュートリアル 」
以上がWin10でのdockerのインストールと使い方(画像と文章で詳しく解説)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。