
一.简介
docker镜像:用来创建docker容器的核心模板
docker容器:容器独立运行的一个或一组命令
docker客户端:客户端通过命令行或者工具使用docker
docker仓库:docker从仓库用来保存镜像,代码控制中的代码仓库
docker主机:一个物理或者虚拟机器用于执行docker的守护进程和容器
二.安装Docker
以前ubuntu安装docker只需要 sudo apt-get install -y http://docker.io
那是旧版本了,需要卸载的需要执行命令
sudo apt-get remove docker docker-engine http://docker.io containerd runc
然后官方的安装方式:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
也可以使用国内daocloud一键安装:
curl -sSL https://get.daocloud.io/docker | sh
菜鸟安装教程:
https://www.runoob.com/docker/ubuntu-docker-install.html
启动docker systemctl start docker
启动docker systemctl enable docker
查看docker版本 docker version/-v
停止docker systemctl stop docker
三.docker命令和应用
1.基本使用
登录自己的帐号: docker login
退出帐号: docker logout
推送自己的镜像: docker push xxxx<用户名>/xxx<镜像名>
查看已经下载的镜像: docker images
搜索镜像: docker search xxxx<镜像名>
拉取镜像: docker pull xxxx<镜像名>
为镜像运行容器: docker run -t -i ubuntu:15.10 /bin/bash-i: 交互式操作-t: 终端 -d: 后台运行 -p: 5000:5000 : 端口绑定 -v: 挂载目录ubuntu:15.10: 镜像/bin/bash: 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
删除镜像: docker rmi xxxx<镜像名>
容器生成镜像: docker commit -m="update content" -a="zhenghuachen"<容器ID> xxx/xxxx<新的镜像名>:v2
查看容器: docker ps -a
启动已经停止的容器: docker start xxxx<容器ID>
停止容器: docker stop xxxx<容器ID>
重启容器: docker restart xxxx<容器ID>
后台运行容器: docker run -itd --name ubuntu-test ubuntu /bin/bash
进入容器: docker exec -it xxxx<容器ID> /bin/bash
删除容器: docker rm -f xxxx<容器ID>
清理掉所有处于终止状态的容器: docker container prune
导出容器快照: docker export xxxx<容器ID> > xxxx.tar
导入容器快照: cat docker/xxxx.tar | docker import - xxxxx<新的镜像名>:v1
2. docker file使用
FROM:格式为FROM image或FROM image:tag,并且Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令。
MAINTAINER:格式为MAINTAINER user_name user_email,指定维护者信息
RUN:格式为RUN command或 RUN ["EXECUTABLE","PARAM1","PARAM2".....],前者在shell终端中运行命令,后者使用exec执行
CMD:用于指定容器启动时执行的命令,每个Dockerfile只能有一个CMD命令,多个CMD命令只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉CMD中指定的命令
EXPOSE:格式为 EXPOSE port [port2,port3,...] 暴露端口
ENV:格式为:EVN key value 用于指定环境变量
ADD:格式:ADD src dest 该命令将复制指定本地目录中的文件到容器中
COPY:格式为:COPY src desc 复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建
ARG: 格式为ARG name=xxxx ,在Dockerfile中定义变量name,在下方或build时使用${name}
ENTRYPOINT: 格式有两种:ENTRYPOINT ["executable","param1","param2"], ENTRYPOINT command param1,param2 会在shell中执行 用于配置容器启动后执行的命令,这些命令不能被docker run提供的参数覆盖。和CMD一样,每个Dockerfile中只能有一个ENTRYPOINT,当有多个时最后一个生效。
docker build: 通过docker build命令来创建镜像,该命令首先会上传Dockerfile文件给Docker服务器端,服务器端将逐行执行Dockerfile中定义的指令, 通过 -t 指定镜像的标签信息,例如:docker build -t chenhuadk/ubuntu . ##"."指定的是Dockerfile所在的路径,如果自己文件名不是Dockerfile,那需要用 -f 参数指定文件路径
3. docker compose使用
linux安装: sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose (版本可以更换 1.24.1)
将可执行权限应用于二进制文件: sudo chmod +x /usr/local/bin/docker-compose
创建软链:sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功: docker-compose --version
<持续更新中···>
四.实用
1. chenhuadc/ubuntu
和宿主机共用jdk的ubuntu镜像

拉下来一个ubuntu镜像,在ubuntu的镜像基础上进行构建
找个位置创建文件夹docker_file,用来放docker file,比如: ~/data/docker/docker_file/
然后在下面创建编写Dockerfile(使用其他的名字,要使用-f指定文件名)文件: vim Dockerfile
Dockerfile
# 镜像巴巴
From ubuntu:latest
# 作者邮箱
MAINTAINER huachen xxxxxxxx@163.com
#定义容器默认的JAVA的根目录
ARG jdk=/usr/local/java/jdk
# 创建jdk文件映射宿主机的目录
RUN mkdir -p ${jdk}
# 配置环境变量
ENV JAVA_HOME ${jdk}
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin
然后执行构建命令,构建自己的镜像: docker build -t chenhuadk/ubuntu .
查看镜像是否构建完成: docker images

运行容器并挂载jdk目录: docker run -itd --name chenhuadk/ubuntu -v /usr/local/java/jdk1.8.0_231:/usr/local/java/jdk chenhuadk/ubuntu /bin/bash
查看容器: docker ps

进入容器执行 docker exec -it chenhuadk-ubuntu /bin/bash
查看环境: java

OK 再复杂也基本就是这样的使用方式,下面上传到docker hub
登录 docker login
提交 dokker push chenhua/ubuntu