特点
-
可以长期运行
-
没有交互会话
-
非常适合运行应用服务
命令
方法一
$ docker run -i -t <镜像> /bin/bash
ctrl+p ctrl+q 退出bash,但没关闭容器
$ docker attach <正在运行容器>
重新进入正在运行的容器
方法二
$ docker run -d <镜像> <命令>
-d 后台守护
查看容器日志
$ docker logs [-f][-t][–tail=n] 容器名
-f 持续输出日志
-t 日志加上时间戳
–tail 返回最后的多少行
查看运行中的容器的进程
$ docker top <容器>
在运行的容器中启动新的进程
$ docker exec [-d][-i][-t] <容器名> [命令]
-d 后台运行
-i 交会运行
-t 打开终端
停止容器
$ docker kill/stop <容器名>
kill 直接停止
stop 等待进程结束后停止
设置端口映射
$ docker run [-P][-p | :] …
-P 映射容器中所有的端口
-p 指定映射容器中某几个端口
eg:
$ docker run -P -i -t ubuntu /bin/bash # 映射所有的端口
$ docker run -p 80 -i -t ubuntu /bin/bash # 映射80端口
$ docker run -p 8080:80 -i -t ubuntu /bin/bash # 将内部的80映射为8080
$ docker run -p 127.0.0.1:8080:80 -i -t ubuntu /bin/bash # 将内部的80端口映射为127.0.0.1:8080
注意:如果使用5、6行的方法进行映射,外部端口是随机分配的
管理镜像
概念
-
TAG:标签
-
默认:latest
-
这里多少为版本
-
eg:docker pull node:12.1.1 下载nodejs12.1.1版本
基本操作
显示所有的镜像
$ docker images [-q][-a] [仓库]
-q 只看id
-a 查看所有
查看镜像的详细
$ docker inspace <镜像名>
删除镜像
$ docker rmi [-f] <镜像名>
-f 强制删除
查找镜像
方法1:镜像dockerhub上查找
方法2:
$ docker search [–automated][-no-trunc][-s ] <镜像名>
–automated 只显示自动化选项
–no-trunc 不分页显示
-s 显示的最低num的stat镜像
下载镜像
$ docker pull [-a] <镜像名>
-a 下载匹配的所有镜像
标记镜像到某个仓库
$ docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
上传镜像到DockerHub
$ docker images #查看本地镜像
$ docker tag <镜像名> <用户名/镜像名> #将镜像转让我的账号下
$ docker push <用户名/镜像名:Tag> #上传镜像
打包镜像
打包镜像有两种方法,推荐使用Dockerfie方法
使用commit打包
将部署好的容器进行打包。
$ docker commit [-a][-m][-p] <容器> <用户名/镜像名:版本>
-a “” 镜像作者
-m “” 打包备注
-p 不停止镜像打包
使用Dockerfile文件打包
第一步:创建Dockerfile文件
#Dockerfile
FORM <基础镜像:Tag>
MAINTAINER <用户名> “联系方式” #新版本推荐使用 LABEL maintainer=value
RUN <linux命令>
…
EXPOSE <端口号>
说明:
这个
EXPOSE
指令实际上并不发布端口。它作为构建映像的人和运行容器的人之间的一种文档类型,而这些港口将被发布。若要在运行容器时实际发布端口,请使用-p
旗上docker run
若要发布和映射一个或多个端口,或-P
标志以发布所有公开的端口,并将它们映射到高阶端口。
第二步:执行docker build命令
$ docker build [-t <镜像名>][–no-cache] <上下文路径>
-t 镜像名称
–no-cache 不使用缓存构建
上下文路径:
docker build 会将这个路径下所有的文件都打包上传给 Docker 引擎,
引擎内将这些内容展开后,就能获取到所有指定上下文中的文件了
注意不要将
/
作为<上下文路径>,因为他会把硬盘上所有的数据发给docker守护进程.
.dockerignore
创建.dockerignore
文件,通过在该文件里添加匹配目录,可以在执行docker build -t xxx .
命令时不上传匹配的目录。
#.dockerignore
/temp #匹配根目录下的子目录内所有的以temp开头的文件和文件夹
//temp* #匹配根目录下的子目录的子目录内所有的以temp开头的文件和文件夹
*/temp #匹配所有目录内的以temp开头的文件和文件夹
!my* #在排除文件及文件夹中允许上传my开头的文件及文件夹
Docker远程访问
Docker的配置文件在Centos7
/lib/systemd/system/docker.service
Docker守护进程Linux上配置文件的默认位置是
/etc/docker/daemon.json
或者通过--config-file
参数可用于指定非默认位置。
Docker守护进程启动选项
-
-H unix:///var/run/docker.sock
-
-H fd://(默认)
配置开始
第一步:配置远程的Docker
vi /lib/systemd/system/docker.service
修改[Service]->ExecStart
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H 0.0.0.0:2375
重启Docker
systemctl daemon-reload && systemctl restart docker
第二步:配置本地的系统环境变量
windows
set DOCKER_HOST=tcp://远程ip
Centos7
export DOCKER_HOST=tcp://远程ip
注意:以上配置都是临时的
测试
docker info
是否有结果
如果想更准确的测试,可以先将远程的Docker守护进程配置一个labels,然后执行命令即可
提示:
其实配置远程还有一种方法就是配置docker守护进程的配置文件
daemon.json
通过配置该文件下的hosts
内的值也可以实现,需要注意的是这两种方法只需要使用其中一种即可。
docker.service
[Service]->ExecStart
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
daemon.json
{
“hosts”:[
"0.0.0.0:2375",
"unix:///var/run/docker.sock"
]
}
Dockerfile指令
关键知识点
- 上下文路径:
<上下文路径 是在使用`docker build`的时候最后一个参数锁指定的路径,通过该路径`docker客户端`会将该路径的下的所有文件都会发送给`docker守护进程`,然后在用户执行`COPY`和`ADD`的时候进行文件复制。如果有不想发送的文件可以向`.dockerignore`中写入匹配忽略路径。