目录
一、docker的概述
docker的作用
1.应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker : 打包镜像发布测试,一键运行
2.更快捷的升级和扩容
使用了Docker之后,我们部署应用就和搭积木一样!
项目打包为一个镜像
3.更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的
4.更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例,服务器的性能可以被压榨到极致。
为什么出现
虚拟机技术拥有很多缺点,导致了容器化技术的出现:
资源占用十分多
冗余步骤多
启动很慢
docker的历史
。。。。
docker的组成
镜像(image):
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,通过这个镜像可以创建多个容器(最终运行或者项目运行都是在容器中的)。
容器(container):
Docker利用容器技术,独立运行一个或者一组应用,是通过镜像来创建的,有启动,停止,删除等Linux基本指令!目前就可以把这个容器理解为一个简易的Linux系统。
仓库(repository)
仓库就是存放镜像的地方,分为私有仓库和公有仓库;Docker Hub(默认是国外的)阿里云…都有容器服务器(配置镜像加速!)
底层原理
二、docker的安装
安装
1.环境查看:linux的内核要是3.10以上的版本
[root@LinuxRoot ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
2.安装:
可以直接参考官方文档,十分详细:https://docs.docker.com/engine/install/centos/
# 1、卸载旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2、需要的安装包
sudo yum install -y yum-utils
# 3、设置镜像的仓库(设置阿里云镜像,这里会比较快)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache fast
# 4、安装docker相关的源 docker-ce 社区 ee 企业版
yum install docker-ce docker-ce-cli containerd.io
# 5、启动docker
systemctl start docker
# 6、使用docker version 查看是否安装成功
# 7、docker run hello-world
# 8、查看下载的这个 hello-world 镜像
[root@LinuxRoot ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 8 days ago 13.3kB
镜像加速器
登录阿里云,就可以根据版本运行相应的命令
帮助文档
卸载
三、docker的常用命令
帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
镜像命令
查看所有本地主机上的镜像
docker images [选项]
可选项
-a, --all # 列出所有的镜像
-q, --quiet # 只显示镜像的id
解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
[root@LinuxRoot ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 8 days ago 13.3kB
nginx latest f6d0b4767a6c 2 months ago 133MB
centos latest 300e315adb2f 3 months ago 209MB
portainer/portainer latest 62771b0b9b09 7 months ago 79.1MB
搜索镜像
docker search 镜像名称 [选项]
-f,-filter:过滤筛选
下载镜像
docker pull 镜像名称:版本号
# 下载镜像 docker pull 镜像名[:tag]
[root@AlibabaECS ~]# docker pull mysql
Using default tag: latest # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
bf5952930446: Pull complete # 分层下载,docker image的核心 联合文件系统
8254623a9871: Pull complete
938e3e06dac4: Pull complete
ea28ebf28884: Pull complete
f3cef38785c2: Pull complete
894f9792565a: Pull complete
1d8a57523420: Pull complete
6c676912929f: Pull complete
ff39fdb566b4: Pull complete
fff872988aba: Pull complete
4d34e365ae68: Pull complete
7886ee20621e: Pull complete
Digest: sha256:c358e72e100ab493a0304bda35e6f239db2ec8c9bb836d8a427ac34307d074ed # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
# 两条命令等价
docker pull mysql
docker.io/library/mysql:latest
# 指定版本下载
docker pull mysql:5.7
[root@AlibabaECS ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
bf5952930446: Already exists
8254623a9871: Already exists
938e3e06dac4: Already exists
ea28ebf28884: Already exists
f3cef38785c2: Already exists
894f9792565a: Already exists
1d8a57523420: Already exists
5f09bf1d31c1: Pull complete
1b6ff254abe7: Pull complete
74310a0bf42d: Pull complete
d398726627fd: Pull complete
Digest: sha256:da58f943b94721d46e87d5de208dc07302a8b13e638cd1d24285d222376d6d84
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
删除镜像
docker rmi 镜像名称
[root@AlibabaECS ~]# docker rmi -f 容器id # 删除指定的容器
[root@AlibabaECS ~]# docker rmi -f 容器id 容器id 容器id # 删除多个容器
[root@AlibabaECS ~]# docker rmi -f $(docker images -aq) # 删除全部容器
容器命令
新建容器并启动
docker run [可选参数] image
参数说明’
--name = "Name" 容器名字 tomcat01,tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看区分
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
测试,启动并进入容器
[root@AlibabaECS bin]# docker run -it centos /bin/bash
[root@94d468db18da /]# ls # 查看容器内的centos,基础版本,很多命令都是不完善的!
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
从容器中退回主机
exit # 直接容器停止并退出
Ctrl + P + Q # 容器不停止退出
列出所有的运行的容器
docker ps [选项]
# 列出当前正在运行的容器 -a
# 列出当前正在运行的容器+带出历史运行过的容器 -n=?
# 显示最近创建的容器 -q # 只显示容器的编号
删除容器
docker rm 容器id # 删除指定容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -aq|xargs docker rm # 删除所有的容器
启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
其他常用命令
1.查看镜像源数据
docker inspect 容器id
2.查看日志
docker logs -f -t --tail 容器id
3.查看容器中的进程信息ps
docker top 容器id
4.进入当前正在运行的容器
法一:进入容器后开启一个新的终端,可以在里面操作(常用)
docker exec -it 容器id /bin/bash
法二:进入容器正在执行的终端,不会启动新的进程
docker attach 容器id
5.从容器内拷贝到主机上
docker cp [r] 容器id :容器内路径 目的地主机路径
参数r : 递归拷贝
四、docker实战
nigix
tomcat
es+kibana
五、docker的镜像
镜像是什么
六、数据卷挂载与数据卷容器的使用
1.普通挂载
2.多个容器(docker容器)数据同步
七、DockFile(打包成镜像)
0.基础与介绍
1.构建步骤
- 编写一个dockerfile文件
- docker build 构建称为一个镜像
- docker run运行镜像
- docker push发布镜像(DockerHub 、阿里云仓库)
2.配置文件语言语法:DockerFile的指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
3.执行生成镜像的命令
4.发布镜像
Dockerfile 就是用来构建 docker 镜像的构建文件!
# 创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 文件中的内容 指令(大写) 参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
#这里的每个命令,就是镜像的一层!
示例:Tomcat镜像
部署自己的tomcat服务器,
1.准备镜像文件 tomcat压缩包,jdk压缩包
2.创建DockerFile文件,文件名称为Dockerfile,这样可以省略-f 命令,默认是当前目录的文件名为"Dockerfile"的文件
内容如下:
FROM centos #
MAINTAINER cheng<1204598429@qq.com>
COPY README /usr/local/README #复制文件
ADD jdk-8u231-linux-x64.tar.gz /usr/local/ #复制解压
ADD apache-tomcat-9.0.35.tar.gz /usr/local/ #复制解压
RUN yum -y install vim
ENV MYPATH /usr/local #设置环境变量
WORKDIR $MYPATH #设置工作目录
ENV JAVA_HOME /usr/local/jdk1.8.0_231 #设置环境变量
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35 #设置环境变量
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib #设置环境变量 分隔符是:
EXPOSE 8080 #设置暴露的端口
CMD /usr/local/apache-tomcat-9.0.35/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.35/logs/catalina.out # 设置默认命令
3.构建镜像
# 因为dockerfile命名使用默认命名 因此不用使用-f 指定文件 ,注意最后的那个点
docker build -t diytomcat .
4.启动镜像
-d 后台运行
-p 指定容器端口和内部暴露端口
--name 取镜像名称
-v 数据挂载
docker run -d -p 9090:8080 --name kuangshentomcat -v /home/deng/build/tomcat/test:/url/local/apache-tomcat-9.0.37/webapps/test -v /home/deng/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.37/logs diytomcat