Docker简单入门实战
Docker 是什么?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 思想
- 集装箱
- 标准化
- 运输方式
- 存储方式
- API接口
- 隔离
Docker 应用场景
- 测试:又拿本地能跑起来搪塞我,mmp!(运行环境不一致导致的问题)
- 运维:系统好卡,哪个哥们写了死循环(运行环境多用户操作问题)
- 老板:双11来了,服务器扛不住了!(快速扩展,弹性伸缩)
Docker核心技术
build 构建 镜像
ship 运输 镜像
run 运行 镜像
Docker镜像
Docker镜像就是一系列的文件(联合文件)
联合文件就是在一个目录下看到多个文件夹下面的东西
通过这种方式就可以达到分层的目的
writable | Container | 释义 |
---|---|---|
add Apache | Image | |
add emacs | Image | |
Debian | Base Image | |
Lxc,aufs/btrfs | Kernel | |
bootfs | bootfs |
想象这个表格是分层系统,只有顶层是可读可写,其他层都是只读的
Docker 容器
Doker 容器本质就是一个进程,可以想象成虚拟机
Docker仓库
- hub.docker.com
- https://c.163.com/hub#/m/home/ 网易蜂巢
- 可以自己搭建内网仓库
Docker实战
只有自己动手才能更好的理解,撸起袖子一起来
环境:centos6.9 64bit
- 检查内核版本,返回的值大于3.10即可。
uname -r
- 使用 sudo 或 root 权限的用户登入终端。
- 确保yum是最新的
yum update
- 添加 yum 仓库
$ tee /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
$ yum install -y docker-engine
- 启动 Docker
$ service docker start
- 查看Docker版本
$ docker version
拉取第一个镜像
- 查看本机docker镜像
$ docker images
- 打开网易蜂巢获取Holle-world 镜像
- 粘贴执行pull 镜像操作
$ docker pull hub.c.163.com/library/hello-world:latest
- 查看镜像
$ docker images
- 运行hollo-wordld镜像
$ docker run hub.c.163.com/library/hello-world
制作自己的镜像
- 下载tomcat 镜像
$ docker pull hub.c.163.com/library/tomcat:latest
- 上传需要部署的war包到自定义的工作目录下
- 在上个步骤创建的通过工作目录下创建Dockerfile文件
- war包和Dockerfile文件放在同一目录下
- 编辑Dockerfile文件
$ vi Dockerfile
from hub.c.163.com/library/tomcat
MAINTAINER luming 1030769815@qq.com
COPY jpress.war /usr/local/tomcat/webapps/
- 通过docker build命令创建镜像
$ docker build -t jpress:latest .
- 查看镜像,复制镜像ID
$ docker images
- 运行自己的镜像
$ docker run -d -p 88:8080 镜像ID
-d:表示在后台运行该镜像(按ctrl+C不会终止该程序)
-p:小写p表示指定本机的32771端口对应容器中的8080端口
- 查看正在运行的容器
$ docker ps
- 浏览器中测试访问
你的宿主机ip:88
容器关闭后,怎么启动
容器关闭后重新进去,数据还在原处吧,比如通过docker ps -a 看到关闭的容器
docker start your_container_name
docker attach your_container_name
进入容器内部查看
- 查看容器ID
$ docker ps
2.进入容器内部
$ docker exec -it 镜像ID /bin/bash
3.退出容器
$ exit
宿主机上传文件到容器
- 查看容器
$ docker ps
- tar所要发送root下的文件到容器中
$ tar -cv root/jpress.war | docker exec -i 容器id或者name tar x -C /usr/local/tomcat/webapps
/usr/src/ghost/content/themes
- 进入容器中验证是否传送成功
$ docker exec -it 镜像ID /bin/bash
$ cd /usr/local/tomcat/webapps
$ ls
- 退出容器
exit
保存对容器的修改
- 运行docker commit,可以查看该命令的参数列表。
$ docker commit --help
2.查看容器,获取ID
$ docker ps
无需拷贝完整的id,通常来讲最开始的三至四个字母即可区分。(译者按:非常类似git里面的版
3.提交容器到镜像中去
$ docker commit 容器ID 自定义镜像名称
执行完docker commit命令之后,会返回新版本镜像的id号。
删除容器和镜像
- 停止容器
$ docker stop 容器名或容器ID
强行停止一个容器的话,最好用docker kill命令
2. 删除容器
$ docker rm 容器名
不能删除一个正在运行的容器,必须先docker stop或者docker kill后我们才能删除
3.删除镜像
$ docker rmi -f 镜像ID或name
-f强制删除,连同依赖
重启容器
$ docker restart
Usage: docker restart [OPTIONS] CONTAINER [CONTAINER…]Restart a running container
查看容器运行日志
$ docker logs 容器名或容器id
设置Docker开机自启动
$ sudo chkconfig docker on
卸载Docker
- 列出安装过的包
$ yum list installed | grep docker
- 删除安装包
$ sudo yum -y remove docker-engine.x86_64
- 删除镜像/容器等
$ rm -rf /var/lib/docker
修改war包
- 新建临时文件夹
$ mkdir tmp
3.进入文件目录
$ cd /tmp
2.将war包拷贝到当前文件夹中
$ cp /root/jpress.war .
3.提取 .war 文件的内容。
$ jar xvf jpress.war
4.修改你要改的文件(我新增了一个db.properties)
5.重新装入.war 文件的内容。
$ jar uvf jpress.war WEB-INF/classe/db.properties