一,Docker概述
一款产品,肯定有两种环境,一个开发环境,一个上线环境。开发 ,运维。 境配置是十分麻烦的,每一个机器都要去部署环境。费事费力。 传统:开发jar,运维来做 现在:开发打包部署上线,一套流程做完。打包项目带上环境。
二,DevOps
应用更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更便捷的升级和扩容
使用了Docker之后,我们的部署就像搭积木一样
项目打包为一个镜像,扩展服务器A,扩展服务器B直接升级,不用给里面一个工具进行升级
更简单的系统运维
在容器化之后,我们的开发,测试环境是高度一致的
更高效的计算资源利用
Docker是内核级别的虚拟化技术,可以在一个物理机上运行多个容器实例。
三,Docker的安装
仓库(repository)
仓库就是用来存放镜像的地方
镜像(image)
docker镜像就好比是一个末班,可以通过这个模板来创建容器服务。
容器(container)
就是一个微小的linux操作系统,我们可以把项目发布在一个容器里面。
环境查看
1 2 3 4 [root@jinggengchen /] 3.10.0-514.26.2.el7.x86_64
安装
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 26 27 28 29 30 31 32 33 34 35 36 37 38 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine yum install -y yum-utils yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast yum install docker-ce docker-ce-cli containerd.io systemctl start docker docker version docker run hello-world docker images yum remove docker-ce docker-ce-cli containerd.io rm -rf /var/lib/docker
设置阿里云镜像加速
1 2 3 4 5 6 7 8 9 10 11 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors" : ["https://qau9aoqi.mirror.aliyuncs.com" ] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
docker卸载
1 2 3 [root@jinggengchen ~] [root@jinggengchen ~] [root@jinggengchen ~]
四,Docker命令
基本信息
1 2 3 4 5 6 [root@jinggengchen ~] [root@jinggengchen ~]
镜像命令
1 2 3 4 5 6 7 8 [root@jinggengchen ~] REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest bf756fb1ae65 5 months ago 13.3kB Options: -a, --all -q, --quiet
1 2 3 4 5 6 7 8 [root@jinggengchen ~] Options: -f, --filter filter Filter output based on conditions provided --format string Pretty-print search using a Go template --limit int Max number of search results (default 25) --no-trunc Don't truncate output
1 2 3 4 [root@jinggengchen ~] [root@jinggengchen ~]
容器命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@jinggengchen ~] Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Options: -d -it -p -p ip:主机端口:容器端口 [root@jinggengchen ~] Options: -a [root@jinggengchen ~] [root@jinggengchen ~] [root@jinggengchen ~] [root@jinggengchen ~] [root@jinggengchen ~]
常用的其他命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@jinggengchen ~] 349142a6db81412664cfb6a2bd583d596b58636ba7dfb319912fe114f857b3e2 [root@jinggengchen ~] CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@jinggengchen ~] [root@jinggengchen ~] [root@jinggengchen ~] [root@jinggengchen ~]
五,容器数据卷
将应用和环境打包成一个镜像
容器之间可以有一个数据共享的计数,Docker哦容器产生的数据,同步到本地。
这就是卷技术,目录的挂载,将我们的容器内的目录,挂载到Linux上面!
Dockerfile就是用来构建docker镜像的构建文件,它是一个命令脚本,
同时使用容器卷可以实现多个容器之间数据的共享
编写dockerfile脚本
1 2 3 4 5 6 7 8 9 FROM centos VOLUME ["volume01" ,"volume02" ] CMD echo "---END---" CMD /bin/bash
1 [root@jinggengchen docker-volume]
进入到自己写的镜像
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 26 27 [root@jinggengchen docker-volume] [root@0903e81de862 /] bash: ll: command not found [root@0903e81de862 /] total 56 lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin drwxr-xr-x 5 root root 360 Jun 23 02:57 dev drwxr-xr-x 1 root root 4096 Jun 23 02:57 etc drwxr-xr-x 2 root root 4096 May 11 2019 home lrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/lib lrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64 drwx------ 2 root root 4096 Jan 13 21:48 lost+found drwxr-xr-x 2 root root 4096 May 11 2019 media drwxr-xr-x 2 root root 4096 May 11 2019 mnt drwxr-xr-x 2 root root 4096 May 11 2019 opt dr-xr-xr-x 84 root root 0 Jun 23 02:57 proc dr-xr-x--- 2 root root 4096 Jan 13 21:49 root drwxr-xr-x 11 root root 4096 Jan 13 21:49 run lrwxrwxrwx 1 root root 8 May 11 2019 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 May 11 2019 srv dr-xr-xr-x 13 root root 0 Jun 23 02:57 sys drwxrwxrwt 7 root root 4096 Jan 13 21:49 tmp drwxr-xr-x 12 root root 4096 Jan 13 21:49 usr drwxr-xr-x 20 root root 4096 Jan 13 21:49 var drwxr-xr-x 2 root root 4096 Jun 23 02:57 volume01 drwxr-xr-x 2 root root 4096 Jun 23 02:57 volume02 [root@0903e81de862 /]
本机的挂载地址
1 2 3 4 5 6 7 [root@jinggengchen volumes] total 32 drwxr-xr-x 3 root root 4096 Jun 23 10:57 2a7681a5c98084f7d2f160ebc042ff732eb816fd811f88892a1c14eb8dfbff0b drwxr-xr-x 3 root root 4096 Jun 23 10:57 f68a2cb650cee70014cfc91e52c49e3c2dbbddf3b78462b10e71d0ac71f0a585 -rw------- 1 root root 32768 Jun 23 10:57 metadata.db [root@jinggengchen volumes] /var/lib/docker/volumes
六,DockerFile
DockerFile是用来构建docker镜像的文件,命令参数脚本
构建步骤
编写一个dockerfile文件
docker build构建成为一个镜像
docker run 运行镜像
docker push 发布镜像(dockerHub,阿里云镜像服务)
dockerfile命令指令
1 2 3 4 5 6 7 8 9 10 11 FROM MAINTAINER RUN ADD WORKDIR VOLUME EXPOSE CMD ENTRYPOINT COPY ENV
1 2 3 4 5 6 7 8 9 10 11 12 13 FROM centos MAINTAINER jinggengchen<1530201142@qq.com> 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-Compose
之前,DockerFile build run 手动操作
之前运行一个镜像,需要添加大量的参数
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
下载路径:
https://github.com/docker/compose/releases/tag/1.24.1
使用Compose基本上是一个三步过程:
使用定义您的应用环境,Dockerfile
以便可以在任何地方复制。
定义组成应用程序的服务,docker-compose.yml
以便它们可以在隔离的环境中一起运行。
Run docker-compose up
and Compose启动并运行您的整个应用程序。