- Docker仓库
- 登录
- 登出
- 拉取镜像
- 推送镜像
- 停止所有镜像
- 删除所有镜像
- 启动进入容器
- 运行日志
- 容器详细信息
- 查看容器端口信息
- 映射
- host模式
- Dockerfile
- workdir
- 构建生成镜像
- 查看构建的镜像
- run
- copy
- add
- cmd命令
- entrypoint
- expose
- 容器中运行程序
- 附录
- Docker中文资源:
仓库(Repository)是集中存放镜像的地方。
目前 Docker 官方维护了一个公共仓库 Docker Hub。
大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像。
登出wuyou@ubuntu :~$ docker login
拉取镜像wuyou@ubuntu :~$ docker logout
#查询镜像 wuyou@ubuntu :~$ docker search ubuntu #拉取镜像 wuyou@ubuntu :~$ docker pull ubuntu推送镜像
用户登录后,可以通过 docker push 命令将自己的镜像推送到 Docker Hub。
//登录docker Hub wuyou@ubuntu :~$ docker login //将本地镜像重命名成规范名称 wuyou@ubuntu :~$ docker tag hello-world:latest 账户名称/hello:v1.0 wuyou@ubuntu :~$ docker images //#推送自己的镜像 wuyou@ubuntu :~$ docker push 账户名称/hello:v1.0 //查询自己账户的镜像 wuyou@ubuntu :~$ docker search 账户名称/hello停止所有镜像
删除所有镜像docker stop $(docker ps -a -q)
启动进入容器docker rm $(docker ps -a -q)
运行日志docker run -it ubuntu /bin/bash
容器详细信息wuyou@ubuntu:~$ docker logs clever_johnson
docker inspect [容器id|镜像id
示例一:
查看容器端口信息wuyou@ubuntu :~$ docker inspect c9d12ce939a0
映射docker port
示例:
wuyou@ubuntu :~$ docker port c9d12ce939a0
随机映射
wuyou@ubuntu :~$ docker run -d -P nginx
指定端口映射
wuyou@ubuntu :~$ docker run -d -p 10086:80 nginx
查看映射端口信息
host模式wuyou@ubuntu :~$ docker port 名称
wuyou@ubuntu :~$ docker run -d --network host nginx
浏览器测试
Dockerfilehttp://本机ip
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
第一个示例
Dockerfile
# FROM:定制的镜像都是基于 FROM 的镜像 FROM ubuntu # 镜像作者 MAINTAINER wuyou wuyou@ubuntu.cn # RUN:用于执行后面跟着的命令行命令。 RUN apt-get update RUN apt-get install -y gcc ENTRYPOINT ["gcc"]
测试
wuyou@ubuntu:~/share/02dockfile$ docker build -t my_gcc .workdir
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。
docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录
才会一直存在。
格式:
WORKDIR <工作目录路径>
//定制于ubuntu from ubuntu:latest //作者 maintainer wuyou wuyou@ubuntu.cn //切换到a目录 workdir /a //执行命令 run touch a.txt workdir b run touch 2.txt构建生成镜像
test: 镜像的名字
查看构建的镜像wuyou@ubuntu:~/share/03dockfile$ docker build -t test:v1.0 .
rundocker images
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
# RUN命令的格式 shell格式 RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令。 exec格式 RUN ["可执行文件", "参数1", "参数2"] # 例如: # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offlinecopy
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
格式:
COPY [--chown=: ] <源路径1>... <目标路径> COPY [--chown= : ] ["<源路径1>",... "<目标路径>"] #参数描述 [--chown= : ]:可选参数,用户改变复制到容器内文件的拥有者和属组。 <源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。 <目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。 示例: COPY hom* /mydir/ COPY hom?.txt /mydir/
Dockerfile
from ubuntu:latest maintainer wuyou wuyou@ubuntu.cn copy hello.txt /data/
docker build -t mytest:v1.1 .
//启动进入容器
adddocker run -it mytest:v1.1 /bin/bash
ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如
下:
- ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,
会自动复制并解压到 <目标路径>。 - ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会
令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
Dockerfile
from ubuntu:latest maintainer wuyou wuyou@ubuntu.cn add test.tar.gz /data/cmd命令
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
- CMD 在docker run 时运行。
- RUN 是在 docker build。
**作用:**为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可
被 docker run 命令行参数中指定要运行的程序所覆盖。
**注意:**如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
格式:
entrypointCMD
CMD [“<可执行文件或命令>”,“”,“”,…]
CMD [“”,“”,…] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意: 如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
格式:
ENTRYPOINT [""," "," ",...]
可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,
以下示例:
FROM nginx
ENTRYPOINT [“nginx”, “-c”] # 定参
CMD [“/etc/nginx/nginx.conf”] # 变参
不传参运行
$ docker run nginx:test #容器内会默认运行以下命令,启动主进程。 #nginx -c /etc/nginx/nginx.conf
传参运行
docker run nginx:test -c /etc/nginx/new.conf #容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件) #nginx -c /etc/nginx/new.confexpose
声明端口。
作用:
- 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
- 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
格式:
EXPOSE <端口1> [<端口2>…]
容器中运行程序#include#include #include #include #include #include #include #include #include int main() { int listen_sock = socket(AF_INET, SOCK_STREAM, 0); if (0 <= listen_sock) { struct sockaddr_in stServerAddr; stServerAddr.sin_family = AF_INET; stServerAddr.sin_addr.s_addr = htonl(INADDR_ANY); stServerAddr.sin_port = htons(55555); if ((0 == bind(listen_sock, (struct sockaddr *)&stServerAddr, sizeof(stServerAddr))) && (0 == listen(listen_sock, 10))) { struct sockaddr_in stClientAddr; socklen_t AddrLen = sizeof(stClientAddr); int data_sock = -1; while (0 <= (data_sock = accept(listen_sock, (struct sockaddr *)&stClientAddr, &AddrLen))) { char szBuff[256]; int recv_len = 0; while (0 < (recv_len = recv(data_sock, szBuff, sizeof(szBuff), 0))) { send(data_sock, szBuff, recv_len, 0); } close(data_sock); } } else { perror("bind:"); } } else { perror("create listen socket:"); } return -1; }
编译程序
wuyou@ubuntu:~/share/06echo$ gcc test.c -o myecho
第一种方式:
Dockerfile
from ubuntu:latest maintainer wuyou wuyou@ubuntu.cn copy myecho / expose 55555 #启动容器的时候执行myecho 必须使用相对路径 cmd ./myecho
wuyou@buuntu:~/share/06echo$ docker build -t mytest:v1.4 .
docker run mytest:v1.4
查看IP和测试
docker inspect crazy_chatelet
使用nc测试
nc 172.17.0.7 55555
退出docker
docker kill crazy_chatelet
第二种方式:
Dockerfile
from ubuntu:latest maintainer wuyou wuyou@ubuntu.cn copy myecho / expose 55555 #启动容器的时候执行myecho entrypoint ./myecho
//执行
docker build -t mytest:v1.5 .
运行
docker run -P mytest:v1.5
测试
附录nc localhost 端口
docker官网:http://www.docker.com
Docker windows入门:https://docs.docker.com/windows/
Docker Linux 入门:https://docs.docker.com/linux/
Docker mac 入门:https://docs.docker.com/mac/
Docker 用户指引:https://docs.docker.com/engine/userguide/
Docker 官方博客:http://blog.docker.com/
Docker Hub: https://hub.docker.com/
Docker开源:https://www.docker.com/open-source
Docker中文网站:http://www.docker.org.cn
Docker入门教程: http://www.docker.org.cn/book/docker.html
Docker安装手册:http://www.docker.org.cn/book/install.html
一小时Docker教程 :https://blog.csphere.cn/archives/22
Docker纸质书:http://www.docker.org.cn/dockershuji.html
DockerPPT:http://www.docker.org.cn/dockerppt.html



