今天简单的去了解了一下Docker,记了些笔记,没有系统的整理,所以非常乱emmmm
docker run ubuntu:15.10 /bin/echo "xianyu"
- docker: Docker 的二进制执行文件。
- run: 与前面的 docker 组合来运行一个容器。
- ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo “xianyu”: 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行
bin/echo "xianyu"
,然后输出结果。docker run -i -t ubuntu:15.10 /bin/bash
- -t: 在新容器内指定一个伪终端或终端。
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
使用该命令创建一个以进程方式运行的容器
输出为一串长字符串,即为容器ID,每个容器ID唯一
可通过
docker ps
常看运行中的容器输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
通过
docker logs
命令,可以查看容器内的标准输出比如:
docker logs 659309fcfaac
或者docker logs peaceful_leakey
使用
docker stop
可以停止容器运行 web 应用
我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。
docker pull training/webapp
# 载入镜像
docker run -d -P training/webapp python app.py
- **-d:**让容器在后台运行。
- **-P:**将容器内部使用的网络端口映射到我们使用的主机上。
docker run -d -p 5000:5000 training/webapp python app.py
也可以使用
-p 5000:5000
手动指定端口,经容器内部5000端口转发到外部server的5000端口- -P :是容器内部端口随机映射到主机的高端口。
- -p : 是容器内部端口绑定到指定的主机端口。
使用
docker port
可以查看端口docker logs -f 可以查看web日志
提交镜像
runoob@runoob:~$ docker commit -m="has update" -a="xianyu" e218edb10161 xianyu/ubuntu:xianyu
- -m: 提交的描述信息
- -a: 指定镜像作者
- e218edb10161:容器 ID
- xianyu/ubuntu:xianyu: 指定要创建的目标镜像名
构建镜像
我们使用命令
docker build
, 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。```bash
runoob@runoob:~$ cat Dockerfile
FROM centos:6.7
MAINTAINER Fisher “fisher@sudops.com“RUN /bin/echo ‘root:123456’ |chpasswd
RUN useradd xianyu
RUN /bin/echo ‘xianyu:123456’ |chpasswd
RUN /bin/echo -e “LANG="en_US.UTF-8"“ >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
- 第一条FROM,指定使用哪个镜像源
- RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
- 然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
- `docker build -t runoob/centos:6.7 .`
- ```
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "[email protected]"
---> Using cache
---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
---> Using cache
---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......参数说明:
- -t :指定要创建的目标镜像名
- . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
命令 作用 docker ps -a 查看所有docker进程 docker logs 停止日志 docker stop 停止容器 docker port 查看端口 docker logs -f 可以查看web日志 docker images 列出本地镜像 docker pull 下载镜像 docker search 查找镜像 docker rmi 删除镜像 docker attach 进入容器 连接容器
运行一个容器并连接到新建的 test-net 网络:
docker run -itd --name test1 --network test-net ubuntu /bin/bash
打开新的终端,再运行一个容器并加入到 test-net 网络:
docker run -itd --name test2 --network test-net ubuntu /bin/bash
下面通过 ping 来证明 test1 容器和 test2 容器建立了互联关系。
如果 test1、test2 容器内中无 ping 命令,则在容器内执行以下命令安装 ping(即学即用:可以在一个容器里安装好,提交容器到镜像,在以新的镜像重新运行以上俩个容器)。
apt-get update
apt install iputils-ping
在 test1 容器输入以下命令:
同理在 test2 容器也会成功连接到:
这样,test1 容器和 test2 容器建立了互联关系。
-
摸鱼真是太快了了2333333