赞
踩
目录
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker
输入docker命令来查看到Docker客户端的所有命令选项
- 〜#docker pull training/webapp 载入镜像
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -d -P training/webapp python app.py
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- bb51b0a936af training/webapp "python app.py" 8 minutes ago Up 7 minutes 0.0.0.0:32768->5000/tcp inspiring_elbakyan
Docker开放了5000端口(默认Python Flask端口)映射到主机端口32769上。
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -d -p 5000:5000 training/webapp python app.py
- 642ca47f644571843bfba0f9bcd8943eae5e4e644ab4318f858c90c76aa924ce
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 642ca47f6445 training/webapp "python app.py" 12 seconds ago Up 10 seconds 0.0.0.0:5000->5000/tcp affectionate_mccarthy
- bb51b0a936af training/webapp "python app.py" 33 minutes ago Up 33 minutes 0.0.0.0:32768->5000/tcp inspiring_elbakyan
容器内部的5000端口映射到我们本地主机的5000端口上。
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker port 642ca47f6445
- 5000/tcp -> 0.0.0.0:5000
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker port affectionate_mccarthy
- 5000/tcp -> 0.0.0.0:5000
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker logs -f 642ca47f6445
- * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker logs -f affectionate_mccarthy
- * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
-f:让dokcer记录像使用 tail -f 一样来输出容器内部的标准输出。
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker top affectionate_mccarthy
- PID USER TIME COMMAND
- 5551 root 0:00 python app.py
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker inspect affectionate_mccarthy
- [
- {
- "Id": "642ca47f644571843bfba0f9bcd8943eae5e4e644ab4318f858c90c76aa924ce",
- "Created": "2018-06-21T13:43:02.676109892Z",
- "Path": "python",
- "Args": [
- "app.py"
- ],
- "State": {
- "Status": "running",
- "Running": true,
- "Paused": false,
- "Restarting": false,
- "OOMKilled": false,
- "Dead": false,
- "Pid": 5551,
- "ExitCode": 0,
- "Error": "",
- "StartedAt": "2018-06-21T13:43:03.150933631Z",
- "FinishedAt": "0001-01-01T00:00:00Z"
- },
- .....
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker stop affectionate_mccarthy
- affectionate_mccarthy
- docker ps -l查询最后一次创建的容器:
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker ps -l
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 642ca47f6445 training/webapp "python app.py" 17 minutes ago Exited (137) 39 seconds ago affectionate_mccarthy
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker start affectionate_mccarthy
- affectionate_mccarthy
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker ps -l
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 642ca47f6445 training/webapp "python app.py" 19 minutes ago Up 3 seconds 0.0.0.0:5000->5000/tcp affectionate_mccarthy
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker rm affectionate_mccarthy
- Error response from daemon: You cannot remove a running container 642ca47f644571843bfba0f9bcd8943eae5e4e644ab4318f858c90c76aa924ce. Stop the container before attempting removal or force remove
直接删除容器会发现报容器正在运行的错误,这是守护进程的错误响应,所有删除容器前要先stop它,正确操作:
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker stop affectionate_mccarthy
- affectionate_mccarthy
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker rm affectionate_mccarthy
- affectionate_mccarthy
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker run ubuntu:15.10 /bin/echo "Hello world"
总体理解:
Docker以ubuntu15.10镜像创建一个新容器,然后在容器里执行/bin/echo "Hello world",然后输出结果
我们通过docker的两个参数 -i -t,让docker运行的容器实现"对话"的能力
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -i -t ubuntu:15.10 /bin/bash
-
- root@797501dba5d9:/# . 此时我们已进入一个 ubuntu15.10系统的容器
我们尝试在容器中运行命令 cat /proc/version和ls分别查看当前系统的版本信息和当前目录下的文件列表
- root@797501dba5d9:/# cat /proc/version
-
- Linux version 4.9.87-linuxkit-aufs (root@95fa5ec30613) (gcc version 6.4.0 (Alpine 6.4.0) ) #1 SMP Wed Mar 14 15:12:16 UTC 2018
-
- root@797501dba5d9:/# ls
-
- bin dev home lib64 mnt proc run srv tmp var
-
- boot etc lib media opt root sbin sys usr
我们可以通过运行exit命令或者使用CTRL+D来退出容器
创建一个以进程方式运行的容器
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker run -d ubuntu:15.10 /bin/sh -c "whiletrue;do echo hello world;sleep 1;done"
-
- dc858826f5c39a22b3682dcf29d8c29693a9047ac7edabad48e8c2d31b663fac
在输出中,我们没有看到期望的"hello world",而是一串长字符
dc858826f5c39a22b3682dcf29d8c29693a9047ac7edabad48e8c2d31b663fac
这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker ps
-
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
- be78a31510d9 ubuntu:15.10 "/bin/sh -c 'while t…" 10 seconds ago Up 8 seconds nervous_khorana
CONTAINER ID:容器ID
NAMES:自动分配的容器名称
在容器内使用docker logs命令,查看容器内的标准输出
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker logs be78a31510d9
或
leiyuxingdeMacBook-Pro:~ leiyuxing$ docker logs nervous_khorana
结果都是:
- hello world
-
- hello world
-
- hello world
-
- hello world
-
- hello world
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker stop be78a31510d9
-
- be78a31510d9
或
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker stop nervous_khorana
-
- nervous_khorana
-
- leiyuxingdeMacBook-Pro:~ leiyuxing$ docker ps
-
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker容器是一种轻量级的虚拟化技术,它可以提供一个独立的应用程序运行环境。虽然Docker容器在使用上非常便利,但是在运行过程中也会遇到一些问题。下面列举了一些常见的问题及处理方法。
处理方法:可以通过docker logs命令查看容器的日志信息,从而找出容器启动失败的原因。常见的原因包括容器的配置有误、端口被占用等。
处理方法:可以通过docker network命令查看容器所属的网络,并确认该网络是否允许访问外部网络。
处理方法:可以通过docker run命令添加-v参数,将本地文件系统的目录映射到容器中,并赋予读写权限。
处理方法:可以通过docker ps命令查看容器的端口映射情况,并确认主机端口是否被占用。
处理方法:可以通过docker stats命令查看容器使用的资源情况,并根据需要对容器进行资源限制。
总之,在使用Docker容器时,应该及时查看日志、调整配置和限制资源使用等,以确保容器能够正常运行。
使用Docker容器时需要注意以下几点:
镜像来源:确保选择可信的镜像源,避免使用未知来源或者不可靠的镜像。
容器网络:容器网络需要与宿主机器进行正确的互通设置。容器内可以使用标准的IP地址和端口号互相访问。
安全设置:容器需要正确设置安全隔离环境,限制容器的权限,避免容器内的安全漏洞对宿主机造成影响。
容器数据管理:容器中的数据需要进行备份,如果容器被删除,数据也会随之丢失。正确的数据备份可以避免数据丢失的风险。
容器监控:需要对容器进行监控,及时发现容器出现的问题。监控可以帮助运维人员快速发现并解决问题。
资源限制:容器可以使用不同的资源限制策略,以避免某些容器过多占用资源,导致性能问题。
应用程序管理:需要正确管理容器中的应用程序版本和配置,确保容器中的应用程序正确运行并能够满足业务需求。
生命周期管理:容器需要进行正确的生命周期管理,包括启动、停止、重启等操作,以确保容器能够正确地工作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。