Docker学习记录(centos6.5)
Docker 简介
JavaEE方向只需了解java
Docker方向需要了解go Swarm/Compose/Machine/mesos/k8s/CI/CD jenkens整合
Docker出现原因
版本迭代的时候,运维需要从操作系统、运行环境、依赖包及应用配置等方面调整,若是稍有差池,就会导致开发环境下正常运行的程序上线后程序运行失败。
环境配置换一台机器就需要重新来一次,费时费力。开发人员可以利用Docker消除协作编码时“在我的机器上可正常工作”的问题。
Docker镜像打破过去程序及应用的观念,透过镜像讲作业系统核心除外,运作应用程序所需的系统环境由下而上打包,达到应用程序跨平台间的无缝接轨运作。
Docker是什么
理念
Docker本质上是一个容器,将应用运行在Docker容器上面,Docker出现在热河操作系统上都是一致的,实现了跨平台、跨服务器。只需一次配置好环境,换到别的机器可以一键部署,大大简化了操作。
定义
解决了运行环境和配置问题软件容器,方便做持续记成并有助于整体发布的容器虚拟化技术。
能干什么
之前虚拟机技术 缺点:资源占用多 冗余步骤多 启动慢
针对前面的虚拟机缺点,发展出Linux容器。linux容器不需要模拟一个完整的操作系统,而是对进城进行隔离。
下载地址
官网
docker官网:http://www.docker.com
docker中文官网:http://www.docker-cn.com/
中文文档
仓库
Docker Hub官网:https://hub.docker.com
Docker安装
Ubuntu16.04
更新apt包索引:
apt-get update
若报出数字签名的问题
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com ********(多个签名时空格分分离)
安装软件包以允许apt通过HTTPS使用存储库
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
添加Docker官方的GPG**
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
设置stable存储库
add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
安装最新版本的Docker CE
apt-get install -y docker-ce --fix-missing
检测docker服务
systemctl status docker
启动docker服务
systemctl start docker
三要素
仓库
镜像
容器
命令
运行
docker run hello-world
帮助
docker version
docker info
docker --help
镜像
本机镜像查看
docker images
RREPOSITORY 镜像仓库源
TAG 镜像标签
IMAGE ID 镜像ID
CREATED 创建时间
SIZE 镜像大小
docker images -a
docker images -q 本地镜像id查看
docker images -qa
远程dockerhub镜像查看
docker search 镜像名称(如tomcat)
NAME 名称
DESCREPTION 描述
STARS 点赞数
OFFICIAL 是否官方
AUTOMATED 是否自动化
docker search -s 50 tomcat 点赞数超出50的镜像罗列
远程镜像拉取
docker pull tomcat <==> docker pull tomcat:latest
本地镜像删除
删除一个镜像
docker rmi -f 镜像id或者唯一镜像名
删除多个镜像
docker rmi -f hello-world ngix
删除全部镜像
docker rmi -f ${docker images -qa}
容器
新建并启动容器
docker run [options] IMAGE[command][arg]
options选项说明:
–name=“容器新名字” 为容器指定名称
-d 后台运行容器,并返回容器id(启动守护式容器)
-i 交互模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输入终端,通常与-i同时使用
-P 随机端口映射
-p 指定端口映射
列出docker所有运行的容器
docker ps [options]
options选项说明:
-a 列出所有正在运行的容器和运行过的容器
-l 显示最近创建的容器
-n 显示最近n个创建的容器
退出容器
exit 容器停止退出
ctrl + P + Q 容器不停止退出
启动容器
docker start 容器名/容器id
重启容器
docker restart 容器名/容器id
停止容器
docker stop 容器名/容器id 正常停止
docker kill 容器名/容器id 暴力停止
docker ps -a | xargs docker stop 停止全部
删除容器
docker rm 容器名/容器id 删除关闭的容器
docker rm -f 容器名/容器id 删除未关闭的容器
docker rm -f ${docker ps -aq}
docker ps -ap | xargs docker rm
重要
启动守护式容器
docker run -d centos
问题:docker ps -a进行查看,会发现容器已经退出
容器运行的命令如果不是一直挂起的命令,会自动退出
docker run -d centos /bin/sh -c “while true; do echo hello zzyy; sleep 2;done”
查看容器日志
docker logs -f -t --tail n 容器id
查看容器内运行的进程
docker top 容器id
查看容器内部细节
docker inspect 容器id
进入正在运行的容器并以命令行交互
直接进入容器内
docker attach 容器名/容器id
docker exec -it 容器id /bin/bash
在外部执行容器内命令
docker excc -t 容器id ls -l /tmp
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 主机路径
容器镜像commit
docker commit -a=“weilong” -m=“add index” 5e8db721aabf weilong/mytomcat:1.1
容器数据卷
直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
宿机和宿主机之间数据共享
容器停止退出后,主机修改数据宿机仍然数据同步
容器内只读镜像构建
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
DockerFile添加
根目录下新建mydocker文件夹并进入
在DockerFile中使用VOLUME指令给镜像添加一个或多个数据卷
FIle构建
build后生成镜像
docker build -f /mydocker/Dockerfile -t weilong/centos .
run 容器
docker run -it weilong/centos /bin/bash
主机上面会生成默认地址,可通过docker inspect 镜像id 查看
注意
Docker挂在主机目录Docker出现cannot open directory .:Permission denied
解决方法: 挂载时添加参数–Priviledged=true
docker run -it -v 主机目录:宿机目录 --Priviledged=true 镜像名
容器传递
–volume-from
容器之间配置信息的传递,数据卷的生命周期器一直持续到没有容器使用为止
docker run -it --name weilong01 weilong/centos
docker run -it --name weilong02 --volumes-from weilong01 weilong/centos
docker run -it --name weilong03 --volumes-from weilong01 weilong/centos
weilong01、weilong02、weilong03之间数据同步
删除weilong01,weilong02和weilong03数据依然同步
DockerFile
体系结构
FROM 基础镜像,当前新镜像基于哪个镜像
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构件式需要运行的命令
EXPOSE 当前容器对外暴露的端口
WORKDIR 指定在创建容器后,终端默认登录进来的工作目录
ENV 用来在构建镜像过程中设置环境变量
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY 类似ADD,拷贝文件和目录到镜像中
VOLUME 容器数据卷,用于数据保存和持久化工作
CMD 指定一个容器启动时要运行的命令
若有多个CMD命令,只有最后一个生效,CMD会被Docker run 之后的参数替换
ENTRYPOINT 指定一个容器启动时要运行的命令
和CMD一样,都是在指定容器启动程序及参数
ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发,类似于触发器
FROM centos
MAINTAINER weilong[email protected]
ENV MYPATH /
WORKDIR $MYPATH
RUN apt-get install vim
RUN apt-get install net-tools
EXPOSE 80
CMD /bin/bash