什么是docker
Docker 的基本组成
镜像( image )
docker 镜像好比是一个模板,可以通过这个模板来创建容器服务。
容器( container )
docker 利用容器技术,独立运行一个或者一组应用,通过镜像来创建。
启动,停止,删除等基本命令
1. 仓库( repository )
仓库是存放镜像的地方,( 共有和私有仓库 )
安装Docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| # ubuntu 下 # 1.卸载旧的版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 2.设置仓库 sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release # 3.切换成国内的镜像源 curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) stable" # 4.更新软件包缓存 sudo apt update # 5.安装docker 服务 sudo apt-get install docker-ce docker-ce-cli containerd.io # 6.启动docker sudo service docker start # docker 测试 # 查看docker 版本信息 docker verison # 运行一个docker实例 sudo docker run hello-world
|
docker底层
docker 是一个 client-server 结构的系统,docker的守护进程运行在主机( 宿主 )上。通过Socket从客户端访问。docker-server 接收到 docker-client 之后就会去运行。
docker为什么比VM快
- docker比VM有更少的抽象层。
- docker利用的是宿主机的内核
docker 容器数据卷
什么是容器数据卷?
如果数据都在容器中,我们将容器删了就会导致数据丢失 ==需求:数据持久化==
容器之间数据共享 docker容器中的数据同步到本地
==将容器数据目录挂载到宿主机上!==
使用数据卷
1
| docker run -it -v 宿主目录:容器目录
|
Dockerfile
dockerFile 是用来构建一个docker image的文件
1 2 3 4 5
| # 自定义DockerFile FROM centos VOLUME [“volume01”,“volume02”] CMD echo "-----end-----" CMD /bin/bash
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # 构建Docker miage docker bulid -f 构建miage使用的文件 -t images名字 images保存目录
# Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos ---> 5d0da3dc9764 Step 2/4 : VOLUME ['volume01','volume02'] ---> Running in d8eb0d2ef56e Removing intermediate container d8eb0d2ef56e ---> 5fc6e1709489 Step 3/4 : CMD echo "-----end-----" ---> Running in f2b5b231b3b0 Removing intermediate container f2b5b231b3b0 ---> 48f502e08ca4 Step 4/4 : CMD /bin/bash ---> Running in e916a60079d8 Removing intermediate container e916a60079d8 ---> 1a522655fe62 Successfully built 1a522655fe62 Successfully tagged long/centos:latest
|
DockerFile构建
基础知识
1. 每个关键字都必须是大写
1. 执行顺序是从上到下
1. #表示注释
1. 每个指令都会构建一层新的镜像,并提交!
DockerFile指令
1 2 3 4 5 6 7 8 9 10 11 12
| FROM # 基础镜像,一切从这里开始构建 MAINTAINER # 作者, 名字+邮箱 RUN # 运行的命令 ADD # 添加新的内容,会自动解压压缩包 WORKDIR # 镜像工作目录 VOLUME # 挂载的目录 EXPOSE # 暴露端口 CMD # 指定这个容器运行的命令,只有最后一个会生效 ENTRPOINT # 追加命令 ONBUILD # 当构建一个被继承 DockerFile 就会触发这个指令 COPY # 类型ADD,将我们的文件拷贝到镜像中,不会自动解压压缩包 ENV # 构建时设置环境变量
|
编写一个自己的centos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| # 编写一个 dockerFile FROM centos MAINTAINER long<[email protected]>
ENV MYPATH /usr/local WORKDIR $MYPATH
RUN yum -y install vim RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH CMD echo "---end---" CMD /bin/bash
# 构建 docker Image docker build -f dockerFile名字 -t 镜像名 ./
|
容器卷自动挂载技术
--volumes-from
1 2 3 4 5 6 7 8
| # 将一个容器的数据卷和另外一个容器的数据卷挂载到一起 # 先启动一个 自定义的centos 里面加入了数据卷 docker run -it --name centos01 long/centos /bin/bash
# 启动第二个 自定义centos时 使用容器卷自动挂载 docker run -it --name centos02 --volumes-from centos01 long/centos /bin/bash
# 此时 第一个容器会产生对应的 volume 卷,第二个容器会使用第一个容器已经产生了的 volume 卷,就不会产生新的 volume 卷
|
Docker网络
docker0 就是docker在虚拟机中的地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 先运行一个 容器 # ip addr 我们就可以得到容器内部的地址 docker run -it --name centos01 centos ip addr
# eth0@if57 eth0@if 开头的就是 docker给容器分配的地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000 link/ipip 0.0.0.0 brd 0.0.0.0 3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000 link/sit 0.0.0.0 brd 0.0.0.0 56: eth0@if57: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever # 容器和容器之间是可以相互ping通的
|
自定义网络
1 2 3 4 5 6 7 8 9
| # 创建了一个名为 mynet的网络组 # --driver 网络模式 # --subnet 子网地址 # --gateway 网关地址 docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# 新建容器时可以指定加入到自定义网络中 docker run -d -P --name tomcat-net-01 --net mynet tomcat
|