docker基础

一、常用命令

1
2
3
4
5
6
7
docker -v # 查看版本号
docker info # 查看docker的信息
# Mac上在安装docker之后点击图标,手动启动docker命令
open /Applications/Docker.app # 还可以使用open命令打开docker应用
docker pull ubuntu # 使用 docker pull 命令来载入 ubuntu 镜像
docker run -it ubuntu /bin/bash # 使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器 -i: 交互式操作,-t: 终端。
docker run -d -p 8100:80 xxx/webapp # 指定端口,将docker的80端口映射到主机 8100 端口上

二、docker 镜像相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
docker images # 查看所有镜像,镜像类似于对象,容器类似于对象的实例,容器是由镜像实例化而来

# 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,
# 如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本
docker pull ubuntu:13.10 # 下载镜像
docker search httpd # 搜索镜像

# 创建镜像方法1:从已经创建的容器中更新镜像,并且提交这个镜像
apt-get update # 在容器内部更新
docker commit -m="has update" -a="runoob" 07a72718ed05 runoob/ubuntu:v2 # 提交更新 -m: 提交的描述信息 -a: 指定镜像作者
# 创建镜像方法2:使用 Dockerfile 指令来创建一个新的镜像(文件内容如下)
docker build -t epoos/nginx . # 根据当前目录下的 Dockerfile 创建镜像

# 删除本地一个或多个镜像(docker rmi [OPTIONS] IMAGE [IMAGE...])
docker rmi hello-world # 加-f参数强制删除

三、docker 容器相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
docker ps -a # 查看所有容器,包括已经停止的容器
docker ps # 查看所有运行中的容器
docker start CONTAINER_ID # 启动一个已停止的容器
docker restart CONTAINER_ID # 启动一个已停止的容器
docker container ls # 查看已经启动的容器列表
docker stop CONTAINER_ID # 停止已经启动的容器
docker attach CONTAINER_ID # 进入已经启动的容器
# docker exec # 推荐家使用,因为此命令会退出容器终端,但不会导致容器的停止
cat ./ubuntu.tar | docker import - test/ubuntu:v1 # 从容器快照文件中再导入为镜像
docker export CONTAINER_ID > ubuntu.tar # 将容器导出为指定文件
docker import http://example.com/exampleimage.tgz example/imagerepo # 可以通过指定 URL 或者某个目录来导入
docker rm -f CONTAINER_ID # 删除指定容器

docker pull epoos/webapp # 载入一个web 应用镜像

docker run -d -p 8100:80 epoos/webapp # 指定端口,将docker的80端口映射到主机 8100 端口上
docker run -ti epoos/webapp /bin/bash # 进入容器的 bash 界面

docker port # 快捷查询端口
docker logs -f CONTAINER_ID # 可以查看容器内部的标准输出。

四、Dockerfile 介绍

Dockerfile 构建镜像所需的指令和说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM # 构建镜像基于哪个镜像
MAINTAINER # 镜像维护者姓名或邮箱地址
RUN # 构建镜像时运行的指令
CMD # 运行容器时执行的shell环境
VOLUME # 指定容器挂载点到宿主机自动生成的目录或其他容器
USER # 为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR # 为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
HEALTHCHECH # 健康检查
ARG # 构建时指定的一些参数
EXPOSE # 声明容器的服务端口(仅仅是声明)
ENV # 设置容器环境变量
ADD # 拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
COPY # 拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
ENTRYPOINT # 运行容器时执行的shell命令

五、使用 Dockerfile 构建应用

1
2
3
4
5
# 新建文件夹里面配置如下三个文件
# ls
./Dockerfile
./index.html
./nginx.conf

1.Dockerfile文件内容

1
2
3
4
5
FROM nginx
RUN mkdir /usr/share/nginx/dist && rm -rf /etc/nginx/nginx.conf
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./index.html /usr/share/nginx/dist/index.html
CMD ["nginx", "-g", "daemon off;"]

2.index.html文件内容

1
2
3
4
5
6
7
8
<html>
<head>
<title>nginx docker server demo</title>
</head>
<body>
nginx docker server demo
</body>
</html>

3.nginx.conf文件内容

1
2
3
4
5
6
7
8
9
10
11
12
# 拷贝一份nginx标准nginx.conf文件,修改80端口的server,如下所示
# ...省略
server
{
listen 80;
server_name localhost;
location /
{
alias /usr/share/nginx/dist/;
}
}
# ...省略

4.构建镜像

1
docker build -t epoos/nginx .

5.构建容器

1
docker run -d -p 8100:80 epoos/webapp # 指定端口,将docker的80端口映射到主机 8100 端口上

6.访问应用

1
http://localhost:8100

六、Docker登录与发布

当我们创建完自己的的docker镜像之后,就可以将其发布到网上供其它使用者直接使用了(和npm 包发布类似)。
首先得注册一个个人账号,地址:docker镜像地址

1
2
3
4
5
docker image tag [本地镜像名称]:[本地镜像tag名称] [username]/[repository]:[tag] # 为本地的docker标注名称和tag
docker image build -t [username]/[repository]:[tag] . # 也可以根据本地的 Dockerfile 配置文件重新创建镜像替换上面这一句

docker login # 登录
docker image push [username]/[repository]:[tag] # 发布

七、docker registry

docker registry是镜像源,下面有多个 docker镜像。
每个docker镜像可以有多个标签(版本)。

八、命令大全

docker命令能查看到 Docker 客户端的所有命令选项

1
docker # docker 能够查看所有的docker命令信息

相关链接

docker 学习网站