docker 理解及常用命令

tsvico Lv5

因为要把一些服务进行 docker 部署,系统的学习了一下 docker 的使用,不说原理,网上很多,只记录一些命令

docker 类似于虚拟机,但是又不同于虚拟机,所有的容器以及镜像都是基于精简的 linux 系统进行展开(划重点,刚开始学习过程中一直在疑惑怎么跑起来一些服务的)

自定义镜像

获取镜像有两种方式,第一种方式是从网上 pull 下来,然后根据要求更改(如果有现成的可以不改),第二种方式,使用 Dockerfile 文件

获取

1
docker pull ubuntu

启动

1
docker run -it -d --name test-ubuntu ubuntu

这样就从 ubuntu 这个镜像上新建了一个容器

查看后台运行的容器

1
docker ps

进入

1
docker attach 上方的id

可以看到是一个精简的 Ubuntu 系统

安装完想要的东西后,生成新镜像(可选)

1
docker commit --change='CMD ["python /app/Api.py"]' -c "EXPOSE 22" flask ubuntu

其他命令后面补上

基于在 Dockerfile 中的指令,我们可以使用 Docker build 命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。

以创建一个 python Flask 为例

新建一个目录,名称随意

1
2
3
mkdir python
cd python
vim Dockerfile

输入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#根镜像
FROM daocloud.io/ubuntu:trusty
MAINTAINER tsvico tsxygwj@163.com
# APT 自动安装 PHP 相关的依赖包,如需其他依赖包在此添加
RUN apt-get update && \
apt-get install -y python \
python-dev \
python-pip \
vim \
# 用完包管理器后安排打扫卫生可以显著的减少镜像大小
&& apt-get clean \
&& apt-get autoclean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ADD re.txt re.txt
RUN pip install -r re.txt
# 配置默认放置 App 的目录
RUN mkdir -p /app
WORKDIR /app
COPY ./test /app
#开放8080端口
EXPOSE 8080
CMD ["python /app/Api.py"]

注:re.txt 放在 python 目录下,是我 flask 环境的一些依赖,把程序源码同样拷贝到 python 目录,放在新建文件夹 test 目录下,

FROM: 必不可少的命令,从某个镜像作为基。如 FROM,或者 FROM:. 如果不加 tag,默认为 latest。先从本地镜像仓库去搜索基镜像,如过本地没有,在去网上 docker registry 去寻找。

MAINTAINER:标明该 Dockerfile 作者及联系方式,可忽略不写

RUN:建立新的镜像时,可以执行在系统里的命令,如安装特定的软件以及设置环境变量。

ENV:设置系统环境变量(注意:写在 /etc/profile 里的命令在 dockerfile 这里会不生效,所以为改成 ENV 的方式)

EXPOSE:开放容器内的端口,但不和宿主机进行映射。方便在宿主机上进行开发测试。(如需映射到宿主机端口,可在运行容器时使用 -p host_port:container_port)

CMD:设置执行的命令,经常用于容器启动时指定的某个操作。如执行自定义脚本服务,或者是执行系统命令。CMD 只能存在一条,如在 Dockerfile 中有多条 CMD 的话,只有最后一条 CMD 生效!

文件中每一条 RUN 命令都为一层,一次写完最好,详情 Google.com

1
2
3
#构建
docker build -t ubuntu-flask .
最后的.不能缺少

常用命令

启动服务

docker run -d -p 8080:8080 --name=api flask-api:latest python /app/Api.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//拉取镜像
docker pull <仓库地址>/<镜像名>:<镜像tag>
//启动容器
docker run -it <镜像名>:<镜像tag> /bin/bash
eg docker run -t -i ubuntu:14.04 /bin/bash
//后台守护进程启动
docker run -dit <镜像名>:<镜像tag> /bin/bash
docker run -dit training/webapp python app.py
-d即是以守护态运行
//自定义端口映射,启动服务
宿主机到容器内的端口映射
docker run -dit -p <hostPort>:<containerPort> --name <自定义容器名> <镜像名>:<镜像tag> /bin/bash && command1 command2
eg docker run -dit -p 5000:5000 training/webapp python app.py
-P:默认匹配docker容器的5000端口号到宿主机的49153 to 65535端口
-p <HOT_PORT>:<CONTAINER_PORT>:指定端口号
--name <自定义容器名>
//查看容器进程
docker ps -a //查看所有容器
docker ps //查看运行中容器
//查看docker的一些底层信息
docker inspect
//重新启动之前的容器
docker start -i 容器名或者id
//删除容器
docker rm 容器id
//删除镜像
docker rmi 镜像id
//退出交互式容器:后台
Ctrl + p Ctrl+Q
进入已经退出的容器
docker attach id/name
直接后台
docker run -d 容器
//查看日志
docker logs -t(时间) -f(更新) 容器名
//查看容器内进程
docker top name
//在容器中启动新进程
docker exec [-d][-i][-t] 容器名[COMMAND][ARG...]
ps: docker exec -i -t 名字 进程
//将容器另存为镜像
docker commit --change='CMD ["启动命令,可选"]' -c "EXPOSE 22" centos123 centos
  • 标题: docker 理解及常用命令
  • 作者: tsvico
  • 创建于 : 2018-11-29 23:35:26
  • 更新于 : 2021-03-06 20:21:07
  • 链接: https://blog.tbox.fun/2018/ce28352e.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
docker 理解及常用命令