docker的使用

一、docker简介

  1. Docker 是一个开源的应用容器引擎,基于GO语言并遵从 Apache2.0 协议开源。

  2. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  3. 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

相关链接
docker官网:http://www.docker.com
Docker Hub官网: https://hub.docker.com/

二、docker架构

docker架构图

Docker 包括三个基本概念:

  1. 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  2. 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  3. 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

三、docker安装

CentOS7安装Docker

1.yum安装gcc相关

yum -y install gcc
yum -y install gcc-c++

2.安装需要的软件包

yum install -y yum-utils

3.设置stable镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.更新yum软件包索引

yum makecache fast

5.安装DOCKER CE

yum -y install docker-ce docker-ce-cli containerd.io

6.启动docker

systemctl start docker

7.阿里云镜像加速

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了:

在这里插入图片描述

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://*********.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

8.测试

docker version
docker run hello-world

9.卸载

systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

官方参考链接:
https://docs.docker.com/engine/install/centos/

四、docker常用命令

1.帮助启动类命令

启动docker: systemctl start docker

停止docker: systemctl stop docker

重启docker: systemctl restart docker

查看docker状态: systemctl status docker

开机启动: systemctl enable docker

查看docker概要信息: docker info

查看docker总体帮助文档: docker --help

查看docker命令帮助文档: docker 具体命令 --help

2.镜像命令

列出本地主机上的镜像 docker images

搜索远程仓库中的镜像 docker search 某个XXX镜像名字

下载镜像 docker pull 某个XXX镜像名字

查看镜像/容器/数据卷所占的空间 docker system df

删除镜像 docker rmi 某个XXX镜像名字ID

3.容器命令

有镜像才能创建容器,这是根本前提

新建+启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明(常用):有些是一个减号,有些是两个减号

–name=“容器新名字” 为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);

-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
也即启动交互式容器(前台有伪终端,等待交互);

-P: 随机端口映射,大写P
-p: 指定端口映射,小写p

官方参考:https://docs.docker.com/engine/reference/commandline/run/

列出当前所有正在运行的容器

docker ps [OPTIONS]

OPTIONS说明(常用):

-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。

退出容器

  1. run进去容器,exit退出,容器停止 exit
  2. run进去容器,ctrl+p+q退出,容器不停止 ctrl+p+q

启动已停止运行的容器

docker start 容器ID或者容器名

重启容器

docker restart 容器ID或者容器名

停止容器

docker stop 容器ID或者容器名

强制停止容器

docker kill 容器ID或容器名

删除已停止的容器

docker rm 容器ID

查看容器日志

docker logs 容器ID

查看容器内运行的进程

docker top 容器ID

查看容器内部细节

docker inspect 容器ID

进入正在运行的容器并以命令行交互

docker exec -it 容器ID bash

从容器内拷贝文件到主机上

docker cp  容器ID:容器内路径 目的主机路径

导入和导出容器

docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

五、docker镜像

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

Docker镜像commit操作

docker commit提交容器副本使之成为一个新的镜像

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

原始的默认Ubuntu镜像是不带着vim命令的,外网连通的情况下,安装vim

apt-get update
apt-get -y install vim

安装完成后,commit我们自己的新镜像

例如:docker commit -m="ifconfig cmd add" -a="zzyy" a69d7c825c4f zzyyubuntu:1.2

六、docker容器

Docker容器数据卷

将docker容器内的数据保存进宿主机的磁盘中,这样在docker容器销毁后,里面的数据也不会丢失。

1.宿主vs容器之间映射添加容器卷

命令:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

查看数据卷是否挂载成功:docker inspect 容器ID

容器和宿主机之间数据共享:docker修改,主机同步获得 ;主机修改,docker同步获得。

2.卷的继承和共享

docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu

七、docker仓库

本地镜像发布到私有库流程

1.下载镜像Docker Registry

docker pull registry 

2.运行私有库Registry,相当于本地有个私有Docker hub

docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry

默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调

3.curl验证私服库上有什么镜像

curl -XGET http://192.168.111.162:5000/v2/_catalog

请使用自己的ip地址

4.将新镜像zzyyubuntu:1.2修改符合私服规范的Tag

docker tag  zzyyubuntu:1.2  192.168.111.162:5000/zzyyubuntu:1.2

5.修改配置文件使之支持http

vim命令新增如下红色内容:vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://*******.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.111.162:5000"]
}

6.push推送到私服库

docker push 192.168.111.162:5000/zzyyubuntu:1.2

7.curl验证私服库上有什么镜像2

curl -XGET http://192.168.111.162:5000/v2/_catalog

8.pull到本地并运行

docker pull 192.168.111.162:5000/zzyyubuntu:1.2

八、Dockerfile

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

官方参考:https://docs.docker.com/engine/reference/builder/

自定义镜像mycentosjava8

FROM centos

ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 80

CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

docker build -t 新镜像名字:TAG .

docker build -t centosjava8:1.5 .

注意,上面TAG后面有个空格,有个点

docker run -it 新镜像名字:TAG

docker run -it centosjava8:1.5 /bin/bash

九、微服务案例

1.IDEA工具里面搞定微服务jar包

2.编写Dockerfile

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER zzyy
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar
# 运行jar包
# 这个命令不执行也行
RUN bash -c 'touch /zzyy_docker.jar' 
ENTRYPOINT ["java","-jar","/zzyy_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6001

3.构建镜像

docker build -t zzyy_docker:1.6 .

4.运行容器

docker run -d -p 6001:6001 zzyy_docker:1.6

5.访问测试

http://192.168.111.163:6001/order/docker

十、Docker网络

查看网络: docker network ls

删除网络: docker network rm XXX网络名字

  1. bridge模式:使用–network bridge指定,默认使用docker0
  2. host模式:使用–network host指定
  3. none模式:使用–network none指定
  4. container模式:使用–network container:NAME或者容器ID指定

自定义网络

自定义桥接网络,自定义网络默认使用的是桥接网络bridge

1.新建网络

docker network create -d bridge test-net

2.新建容器加入上一步新建的自定义网络

docker run -d -p 8081:8080 --network zzyy_network  --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network zzyy_network  --name tomcat82 billygoo/tomcat8-jdk8

3.互相ping测试

ping tomcat81
ping tomcat82

自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)

十一、总结

本文仅对docker常用命令和概念做简要介绍。docker是一个非常庞大的生态系统,还有很多内容。例如:Docker-compose容器编排、Docker轻量级可视化工具Portainer、Swarm集群、Docker容器监控之CAdvisor+InfluxDB+Granfana。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值