Docker
小述Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Centos7下部署Docker
docker安装
首先检查内核版本,要求必须要在3.10+
1
uname -r
确保yum是最新的(可以忽略此步)
1
yum update
添加docker于yum仓库
1
2
3
4
5
6
7
8tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF安装docker
1
yum install -y docker-engine
启动验证
启动/重启/停止的命令1
2
3systemctl start docker
systemctl restart docker
systemctl stop docker
验证1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17docker version
Client:
Version: 17.05.0-ce
API version: 1.29
Go version: go1.7.5
Git commit: 89658be
Built: Thu May 4 22:06:25 2017
OS/Arch: linux/amd64
Server:
Version: 17.05.0-ce
API version: 1.29 (minimum version 1.12)
Go version: go1.7.5
Git commit: 89658be
Built: Thu May 4 22:06:25 2017
OS/Arch: linux/amd64
Experimental: false
镜像管理
启动docker后可以查看此时拥有的镜像源:1
docker image
下载拉取镜像源
1
2//例:拉取tomcat镜像
docker pull hub.c.163.com/library/tomcat:latest修改镜像名和标签
1
docker tag hub.c.163.com/library/tomcat:latest tomcat:v8.5
删除原来的镜像
1
docker rmi -f hub.c.163.com/library/tomcat:latest
将该服务在后台运行起来(并指定由服务器58080端口对其映射)
1
docker run -d -p 58080:8080 tomcat:v8.5
查看
1
2//查看运行中的容器信息
docker ps
此时在浏览器即可访问此时运行的tomcat了,并且是在我们指定的58080端口:1
http://ip:58080
与docker的亲密接触
日常命令
登录(登出)一个Docker镜像仓库,如未指定仓库地址,默认为官方仓库Docker Hub
1
2
3
4docker login [option] [server]
docker logout [option] [server]
//例:
docker login -u 用户名 -p 密码从Docker Hub中查找镜像
1
2
3
4docker search [option] team
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-s :列出收藏数不小于指定值的镜像。将本地镜像上传到镜像仓库(必须先登录)
1
2docker push [options] name[:tag]
--disable-content-trust 忽略镜像的校验,默认开启从镜像仓库中拉取或更新指定仓库
1
docker pull [options] name[:tag|@digest]
列出本地镜像
1
docker images [options] [repository[:tag]]
删除一个或多个本地镜像
1
2
3docker rmi [options] image [image ...]
-f 强制删除
--no-prune 不移除该镜像的过程镜像,默认移除标记本地镜像,将其归入某一仓库(修改镜像名)
1
docker tag [options] image[:tag] name[:tag]
使用Dockerfile创建镜像
1
2
3
4
5
6
7docker build [options] path | url | -
-f 指定要使用的Dockerfile的路径
-m 设置内存最大值
-q 安静模式,成功后只输出镜像ID
--rm 设置镜像成功后删除中间容器
//例:
docker build -t /fy/tomcat:v8.5 .查看指定镜像的创建历史
1
docker history [options] image
将指定镜像保存成tar归档文件
1
2docker save [options] image [image ...]
-o 输出到的文件从归档文件中创建镜像
1
2
3
4
5docker import [options] file|url|- [repository[:tag]]
-c 应用docker指令创建镜像
-m 提交时的说明文字
//例:
docker import abc.tar fy/tomcat:v8.5创建一个新的容器但不启动
1
docker create [options] image [command] [arg ...]
创建一个新的容器并运行一个命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17docker run [options] image [command] [arg ...]
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口
-p:指定映射端口 服务器端口:容器端口
-P:系统自动为其分配映射端口杀掉一个运行中的容器
1
2docker kill [options] container [container ...]
-s 向容器发送一个信号删除一个或多少容器
1
2
3
4docker rm [options] container [container ...]
-f 通过SIGKILL信号强制删除一个运行中的容器
-l 移除容器间的网络连接,而非容器本身(后接连接名,不是容器名)
-v 删除容器和与容器相关联的卷暂停/恢复容器中的所有进程
1
2docker pause [options] container [container ...]
docker unpause [options] container [container ...]在运行的容器中执行命令
1
2
3
4
5
6
7
8docker exec [options] container command [arg ...]
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
//例:在容器test中以交互模式执行容器内的/root/run.sh脚本
docker exec -ti test /bin/sh /root/run.sh
//例:在容器test中开启一个交互模式的终端(即进入test容器)
docker exec -ti test /bin/bash列出容器
1
2
3
4
5
6
7
8
9docker ps [options]
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。获取容器/镜像的元数据
1
2
3
4docker inspect [options] name|id [name|id ...]
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。查看容器中运行的进程信息,支持ps命令参数
1
docker top [options] container [ps options]
从服务器获取实时事件
1
2
3
4docker events [options]
-f :根据条件过滤事件;
--since :从指定的时间戳后显示所有事件;
--until :流水时间显示到指定的时间为止;获取容器的日志
1
2
3
4
5docker logs [options] container
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志阻塞运行直到停止,最后打印它的退出代码
1
docker wait [options] container [container ...]
从容器创建一个新的镜像
1
2
3
4
5docker commit [options] container [repository[:tag]]
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。容器与主机之间的数据拷贝
1
2
3docker cp [options] container:src_path dest_path
docker cp [options] src_path container:dest_path
-L 保持源目标中的链接检查容器里文件结构的更改
1
docker diff [options] container
额外需求
给普通用户添加使用docker的权限
这样普通就可以使用docker命令而无需root权限。1
2
3usermod -a -G docker 用户名
systemctl restart docker
注意:该用户需要重新登录才生效
制作自己的镜像
1 | //此例为tomcat7.0 |
报错解决:1
2
3
4
5
6
7
8报错:在启动tomcat(./startup.sh)如果报
-bash: ./startup.sh: Permission denied
解决:解决(进入tomcat的bin目录赋权限)
chmod u+x *.s
报错:在启动时如果报
The APR based Apache Tomcat Native library which allows optimal
解决:解决(下载tcnative-1.dll,放到tocat的bin目录下)
wget http://tomcat.heanet.ie/native/1.1.12/binaries/win32/tcnative-1.dll
Dockerfile详解
1 | 常用: |
上面知识点很多,字太多,手敲有点累,博主直接从笔记中copy出来,还望读者见谅!
希望大家在Docker梦工厂中畅游后能有所收获,也不负博主整理编辑了半天,hhh~