docker理解及常用命令

因为要把一些服务进行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
您的支持将鼓励我继续创作!

本文作者:tsvico

发布时间:2018年11月29日 - 23:11

最后更新:2018年11月30日 - 00:11

本文链接:http://blog.peoplevip.cn/2018/ce28352e.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------