Author:水木黄昏

Docker

Docker加速

在/etc/docker/daemon.json加入
{“registry-mirrors”:[“https://reg-mirror.qiniu.com/”]}

Docker服务

sudo service docker restart/start/stop

Docker镜像

获取镜像

docker pull 镜像名

查找镜像

docker search 镜像名

查看本地镜像

docker images

删除镜像

docker rmi 镜像名

更新镜像

docker commit -m="提交的描述信息" -a="镜像作者" 容器ID 用户名/更新后镜像名:版本

构建镜像

dockerfile:

FROM:基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER:镜像维护者的姓名和邮箱地址

RUN:容器构建时需要运行的命令

EXPOSE:当前容器对外暴露出的端口

WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

ENV:用来在构建镜像过程中设置环境变量

ADD:将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 压缩包

COPY:类似 ADD,拷贝文件和目录到镜像中。(COPY src dest 或 COPY [“src”,“dest”])

VOLUME:容器数据卷,用于数据保存和持久化工作

CMD:指定一个容器启动时要运行的命令,Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

ENTRYPOINT:指定一个容器启动时要运行的命令,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数

ONBUILD:当构建一个被继承的 Dockerfile 时运行命令,父镜像在被子继承后父镜像的 onbuild 被触发

eg:

FROM centos
MAINTAINER jhxxb

# 把宿主机当前目录下的 jdk1.8.0_221 拷贝到容器 /usr/local/ 路径下
COPY jdk1.8.0_221/ /usr/local/jdk1.8.0_221/

# 把宿主机当前目录下的 tomcat 添加到容器 /usr/local/ 路径下
ADD apache-tomcat-9.0.24.tar.gz /usr/local/

# 安装vim编辑器
RUN yum -y install vim

# 设置工作访问时候的 WORKDIR 路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH

# 配置 java 与 tomcat 环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_221
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.24
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.24
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

# 容器运行时监听的端口
EXPOSE  8080

# 启动时运行 tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.24/bin/startup.sh" ]
CMD ["/usr/local/apache-tomcat-9.0.24/bin/catalina.sh","run"]
# CMD /usr/local/apache-tomcat-9.0.24/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.24/bin/logs/catalina.out
docker build -f mydockerfile -t mytomcat:0.1 .

设置镜像标签

docker tag 镜像ID 用户名/镜像名:新的标签名

容器

启动容器

docker run -itd -P 127.0.0.1:5001:5000 --name tom training/webapp python app.py
-i: 交互式操作
-t: 终端
-d:后台运行
-p:绑定地址:端口 默认tcp通信,如需要udp需加/udp
--name:容器命名
training/webapp: 镜像
python app.py:运行容器中程序,也可以只启动容器不运行程序则不用加
/bin/bash:交互式 Shell,/bin/bash。

查看运行容器

docker ps

查看所有的容器

docker ps -a

容器重启与停止

docker restart/stop <容器 ID>

进入容器

docker attach 容器id
docker exec -it 容器id /bin/bash

导出和导入容器

docker export 容器id >压缩包.tar
docker import http://example.com/exampleimage.tgz或者example/imagerepo

删除容器

docker rm -f 容器id

Docker 容器互联

docker网络
docker network create -d bridge/overlay(集群) 网络名
容器链接
运行一个容器并连接到新建的网络
docker run -itd --name 容器名1 --network 网络名 镜像名 /bin/bash 
打开新的终端,再运行一个容器并加入网络
docker run -itd --name 容器名2 --network 网络名 镜像名 /bin/bash
手动指定容器的配置
docker run -it --rm host_ubuntu  --dns=114.114.114.114 --dns-search=test.com ubuntu

-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。

–dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。

–dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。

配置主机DNS

我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:

{
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}

Docker仓库

登录退出

docker login/logout

推送镜像

docker push username/ubuntu:18.04