赞
踩
什么是Docker?我个人理解:轻量化虚拟,属于Liunx容器的一种封装,将程序和依赖放入Docker容器中运行,虚拟环境,隔离跑。
举个常见的例子:mac系统下使用homebrew进行安装
只需要输入:~$ brew cask install docker 就可以了,效果如下。
- $ brew cask install docker
-
- ==> Creating Caskroom at /usr/local/Caskroom
- ==> We'll set permissions properly so we won't need sudo in the future
- Password: # 输入 macOS 密码
- ==> Satisfying dependencies
- ==> Downloading https://download.docker.com/mac/stable/21090/Docker.dmg
- ######################################################################## 100.0%
- ==> Verifying checksum for Cask docker
- ==> Installing Cask docker
- ==> Moving App 'Docker.app' to '/Applications/Docker.app'.
- 🍺 docker was successfully installed!
个人看来Docke核心有三部分:镜像(images)、容器(container)、仓库(registry)。
三者之间的关系:复制镜像可生成Docker容器,同一镜像Docker容器相同,仓库中可存放多个镜像,根据需求pull。
镜像可自定义(dockerfile:用于生成自定义镜像 ,可自行深入了解一下)
Docker安装完之后可配置下镜像加速,我配置的是网易的:找到鲸鱼小图标,点击选择preference->Daemon->registry mirrors中配置镜像加速路径:http://hub-mirror.c.163.com->Apply&Restart就可以了
Docker客户端:
~$ docker
~$ docker help
~$ docker stats --help
- Usage: docker stats [OPTIONS] [CONTAINER...]
-
- Display a live stream of container(s) resource usage statistics
-
- Options:
- -a, --all Show all containers (default shows just running)
- --format string Pretty-print images using a Go template
- --no-stream Disable streaming stats and only pull the first result
- --no-trunc Do not truncate output
常见的命令:
| 命令 | 作用 |
| ~$ docker version或~$ docker info | 查看版本或信息 |
| ~$ docker run ubuntu:15.10 /bin/echo "hi,baby" | 以ubuntu15.10为镜像创建docker容器,然后在该容器中run,输出“hi,baby” |
| ~$ docker run -i -t ubuntu:15.10 /bin/bash root@48f72bd6af73:/# cat /proc/versio | 运行容器交互 |
| ~$docker stop 容器Id | 终止容器 |
| ~$ docker stop 容器名 | 终止容器 |
一个web测试:
~$ docker pull training/webapp (载入镜像)
- docker容器中运行一个 Python Flask 应用然后运行一个web应用:
- parkin@parkindeMacBook-Air:~$ docker pull training/webapp
- Using default tag: latest
- latest: Pulling from training/webapp
- e190868d63f8: Downloading
- 909cd34c6fd7: Downloading
- 0b9bfabab7c1: Downloading
- a3ed95caeb02: Downloading
- 10bbbc0fc0ff: Downloading
- fca59b508e9f: Downloading
- e7ae2541b15b: Downloading
- 9dd97ef58ce9: Downloading
- a4c1b0cb7af7: Downloading
- latest: Pulling from training/webapp
- e190868d63f8: Pull complete
- 909cd34c6fd7: Pull complete
- 0b9bfabab7c1: Pull complete
- a3ed95caeb02: Pull complete
- 10bbbc0fc0ff: Pull complete
- fca59b508e9f: Pull complete
- e7ae2541b15b: Pull complete
- 9dd97ef58ce9: Pull complete
- a4c1b0cb7af7: Pull complete
- Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
- Status: Downloaded newer image for training/webapp:latest

~$ docker run -d -P training/webapp python app.py
注意:-P必须是大写,小写不对,-d:让容器在后台运行。-P:将容器内部使用的网络端口映射到我们使用的主机上。)
- 错误的:(-p小写)
- parkin@parkindeMacBook-Air:~$ docker run -d -p training/webapp python app.py
- docker: invalid publish opts format (should be name=value but got 'training/webapp').
- See 'docker run --help'.
- 正确的:(-P大写)
- parkin@parkindeMacBook-Air:~$ docker run -d -P training/webapp python app.py 7360aa21c5e4076abc82b6858d4433ff87ff296452b5ef602fe8c22b78cf896
- parkin@parkindeMacBook-Air:~$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 17360aa21c5e training/webapp "python app.py" 18 seconds ago Up 16 seconds 0.0.0.0:32768->5000/tcp ecstatic_mccarthy
~$ docker ps (查看正运行的容器)
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上,访问127.0.0.1:32768会显示“Hello world!”。
- parkin@parkindeMacBook-Air:~$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 17360aa21c5e training/webapp "python app.py" 18 seconds ago Up 16 seconds 0.0.0.0:32768->5000/tcp ecstatic_mccarthy
~$ docker ps -l (查看最后一次创建的容器)
- parkin@parkindeMacBook-Air:~$ docker ps -l
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- cae0bfc03bfe training/webapp "python app.py" 21 seconds ago Up 19 seconds 0.0.0.0:7777->5000/tcp goofy_elgamal
~$ docker run -d -p 5000:5000 training/webapp python app.py (修改端口)
注意:修改端口时 -p是小写,再次强调小写。
- parkin@parkindeMacBook-Air:~$ docker run -d -p 7777:5000 training/webapp python app.py
- cae0bfc03bfe972c31fddeee5f7dcfdb3e883bbb3c8ec31a01e61cb8819af340
- parkin@parkindeMacBook-Air:~$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- cae0bfc03bfe training/webapp "python app.py" 9 seconds ago Up 8 seconds 0.0.0.0:7777->5000/tcp goofy_elgamal
- edcc4ba9f383 training/webapp "python app.py" 31 minutes ago Up 21 minutes 0.0.0.0:5000->5000/tcp admiring_germain
- 17360aa21c5e training/webapp "python app.py" 39 minutes ago Up 39 minutes 0.0.0.0:32768->5000/tcp ecstatic_mccarthy
~$ docker port 容器id或者名字(web应用容器ID或名字查看容器端口映射)
- parkin@parkindeMacBook-Air:~$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- edcc4ba9f383 training/webapp "python app.py" 14 seconds ago Up 13 seconds 0.0.0.0:5000->5000/tcp admiring_germain
- 17360aa21c5e training/webapp "python app.py" 8 minutes ago Up 8 minutes 0.0.0.0:32768->5000/tcp ecstatic_mccarthy
- parkin@parkindeMacBook-Air:~$ docker port edcc4ba9f383
- 5000/tcp -> 0.0.0.0:5000
- parkin@parkindeMacBook-Air:~$ docker port admiring_germain
- 5000/tcp -> 0.0.0.0:5000
- parkin@parkindeMacBook-Air:~$ docker port 17360aa21c5e
- 5000/tcp -> 0.0.0.0:32768
~$ docker logs -f id或者名字(查看web应用程序日志)
-f: 让 docker logs 输出容器内部的标准。应用程序使用的是 5000 端口和应用程序的访问日志。
- parkin@parkindeMacBook-Air:~$ docker logs -f 17360aa21c5e
- * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
- 172.17.0.1 - - [14/Mar/2019 05:23:59] "GET / HTTP/1.1" 200 -
- 172.17.0.1 - - [14/Mar/2019 05:23:59] "GET /favicon.ico HTTP/1.1" 404 -
- 172.17.0.1 - - [14/Mar/2019 05:30:27] "GET / HTTP/1.1" 200 -
- 172.17.0.1 - - [14/Mar/2019 05:30:28] "GET / HTTP/1.1" 200 -
- 172.17.0.1 - - [14/Mar/2019 05:30:28] "GET / HTTP/1.1" 200 -
- 172.17.0.1 - - [14/Mar/2019 05:30:28] "GET / HTTP/1.1" 200 -
- 172.17.0.1 - - [14/Mar/2019 05:30:29] "GET / HTTP/1.1" 200 -
- 172.17.0.1 - - [14/Mar/2019 05:30:29] "GET / HTTP/1.1" 200 -
- 172.17.0.1 - - [14/Mar/2019 05:30:49] "GET / HTTP/1.1" 200 -
-
- ^C
~$ docker top 名字(查看web应用程序进程)
- parkin@parkindeMacBook-Air:~$ docker top admiring_germain
- PID USER TIME COMMAND
- 3602 root 0:00 python app.py
- parkin@parkindeMacBook-Air:~$ docker inspect
~$ docker inspect 名字(docker inspect查看docker底层信息)
-
- JSON 文件记录 Docker 容器的配置和状态信息
- {
- "Id": "edcc4ba9f383daac707a62d4f8bede9a6a818c99aa9639daa4db5492629e5c1d",
- "Created": "2019-03-14T05:29:54.4430641Z",
- "Path": "python",
- "Args": [
- "app.py"
- ],
- "State": {
- "Status": "running",
- "Running": true,
- "Paused": false,
- ...,
- }
- }
- ]

~$ docker stop 名字(停止应用程序)
- parkin@parkindeMacBook-Air:~$ docker stop admiring_germain
- admiring_germain
~$ docker start 名字(重启应用程序)
- parkin@parkindeMacBook-Air:~$ docker start admiring_germain
- admiring_germain
~$ docker rm 名字(移除应用程序)
注意:移除容器的时候必须先停止容器,否则会报错。
- 未关闭:
- parkin@parkindeMacBook-Air:~$ docker rm admiring_germain
- Error response from daemon: You cannot remove a running container edcc4ba9f383daac707a62d4f8bede9a6a818c99aa9639daa4db5492629e5c1d. Stop the container before attempting removal or force remove
- 已关闭:
- parkin@parkindeMacBook-Air:~$ docker stop admiring_germain
- admiring_germain
- parkin@parkindeMacBook-Air:~$ docker rm admiring_germain
- admiring_germain
- parkin@parkindeMacBook-Air:~$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- cae0bfc03bfe training/webapp "python app.py" 28 minutes ago Up 28 minutes 0.0.0.0:7777->5000/tcp goofy_elgamal
- 17360aa21c5e training/webapp "python app.py" About an hour ago Up About an hour 0.0.0.0:32768->5000/tcp ecstatic_mccarthy
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。