Docker是一种进程级别的隔离
一、概念
1、镜像image
Docker把应用程序以及依赖,打包到image里面。只有通过这个文件,才能生成docker容器。image文件可以看做是容器的模板
image文件是通用的,一台机器的image文件拷贝到另外一台机器上照样可以用。可以通过docker file来构造image镜像,但是一般我们都是用别人制作好的image文件。
2、容器 Contaner
Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例,容器是可以修改的,可以将容器当前的状态保存到对应的镜像中。
3、仓库 Respostory
仓库是集中存放镜像的地方。镜像构建完成以后,可以很容易的在当前的宿主机上运行,但是,如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、奋发镜像的服务,Docker Registry(仓库注册服务)就是这样的服务
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应 该软件的版本。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件那个版本的镜像。如果不给出标签,将以latest作为默认标签
分为共有仓库和私有仓库
Docker Registry共有仓库是开放给用户使用,允许用户管理镜像的Registry服务(一般这类服务允许用户免费上传,下载镜像,并可能提供收费服务给私有服务)
除了共有仓库,还有在本地搭建的私有仓库
二、各组件之间的关系
三、docker环境部署
1、安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2、设置国内yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3、安装docker
yum install docker-ce docker-ce-cli containerd.io -y
4、启动/关闭docker服务
systemctl start docker
systemctl stop docker
四、docker基本命令
1、搜索镜像
docker search [imageName]
2、拉取镜像
docker pull {imageName}[:{imageTag}]
imageName:镜像名称
imageTag:标签其实也就是版本
具体如何看imageTag,我们可以通过docker的官网
-->然后在dockerHub内搜索想要拉的镜像(如:tomcat)-->切换到tag,就可以看到对应的版本,同样也可以复制右侧拉取的命令
3、查看本地镜像
docker images
4、运行容器
docker run {imageid}
-d:后台运行镜像
-t:启动一个终端
-i:标准输入
-p:容器内的端口映射到本机端口
-v:文件映射
举例: 启动tomcat
docker run -d -p 9090:8080 709732b01e4a
把这个容器内的8080端口映射到本机的9090端口,意思是外面的人访问9090端口,其实访问的就是容器内的8080端
5、查看运行中的docker:docker ps
查看所有历史容器:docker ps -a
6、查看docker容器日志
docker logs -f {容器id}
此容器id指的是:docker ps 执行后CONTAINER ID
7、进入容器:docker exec -it {containerid} /bin/bash -->比如:进入到docker容器内的tomcat文件内,退出时直接输入:exit
docker exec -it {containerid} /bin/bash
-it 打开一个终端 /bin/bash 指定启动的程序,实际是linux下的命令
注意:进入到容器里面,有些Linux命令不能使用,如:vi,ll
8、docker拷贝文件:docker cp {localPath} {containerid}:{containerPath}
docker cp jmeter.log 8b4361fa0da9:/usr/local/tomcat/logs
例如:把jmeter.log文件复制到docker容器内的tomcat/logs文件内
9、启动/停止/重启已存在的容器:docer start/stop/restart{containerid}
10、移除docker容器:docker rm {containerid} (容器必须在停止状态)
11、删除镜像 docker rmi {imageid}
五、docker项目部署实战(基于Tomcat+mysql部署项目)
1、拉取mysql镜像
docker pull mysql:latest
2、在宿主机创建mysql文件夹,并进入此文件夹内
mkdir -p /home/docker/mysql
cd /home/docker/mysql
echo $PWD -->/home/docker/mysql
创建这两个文件夹的目的:把Docker中的mysql的配置文件映射到conf,数据文件映射到data
3、启动mysql镜像
docker run --name mysqlserver -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -i -p 3306:3306 mysql:latest 解释: --name 自定义容器名称 -d 后台运行 --privileged=true 设置容器内的权限为真正root权限 -v 将容器内的配置文件挂载到本机 -e 设置容器密码变量为123455
在var/lib/docker/containers/下查看容器
并可以查看启动的容器:docker ps
查看启动以后mysql文件夹,发现新增加了conf、data、logs文件夹
4、进入mysql容器并启动
docker exec -it 33acaf75d352 /bin/bash
或者
docker exec -it mysqlserver bash
5、登录mysql数据库
mysql -uroot -p
6、拉取tomcat并创建项目映射目录
mkdir -p /home/docker/tomcat/webapps
将项目放到webapps目录下
7、 启动tomcat
docker run --name tomcat -d -p 8080:8080 -v /home/docker/tomcat/webapps:/usr/local/tomcat/webapps tomcat:jdk8-adoptopenjdk-hotspot
六、dockerfile 创建镜像
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
例一:把一个本地存在的jar包创建成镜像
1)先在在/home/docker/files/pinter创建Dockerfile文件,然后编辑以下内容
//CMDRunner.jar是需要依赖jdk的,所以需要基于Java的镜像基础上进行创建FROM hub.c.163.com/library/java
即:基于hub.c.163.com/library/java这个镜像,此镜像已经提前拉取到了本地,如果没有拉到本地的话就会从网上拉取) FROM hub.c.163.com/library/java //做镜像的时候把jar放到镜像里面,放到里面的话先创建目录,然后复制到app目录下(这时候我们需要提前把CMDRunner.jar上传到pinter文件夹下) RUN mkdir -p /home/app COPY CMDRunner.jar /home/app //镜像的工作目录为/home/app,镜像对外暴露端口为8080 WORKDIR /home/app EXEPOSE 8080 //执行命令 CMD java -jar CMDRunner.jar
备注:在一个Dockerfile里面可以有多个RUN,但是只能有一个CMD
FROM 和 RUN 指令的作用
FROM:定制的镜像都是基于 FROM 的镜像
RUN:用于执行后面跟着的命令行命令。
2)生成镜像
//docker build 构建 ; -t:标签的含义 镜像名称:标签名称;.当前目录 docker build -t CMDRunner:wufq .
参考文章:https://www.runoob.com/docker/docker-dockerfile.html
七、docker - compose容器管理工具
1、下载安装:http://get.daocloud.io/#install-compose 可以在此网站上下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、设置权限
chmod +x /usr/local/bin/docker-compose
3、验证版本
docker-compose -v
4、在任意路径下创建docker-compose.yml文件
touch docker-compose.yml
创建好以后输入以下内容
version: "3" services: redis: image: redis:alpine ports: - "6379" networks: - frontend deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks: - backend deploy: placement: constraints: [node.role == manager]
5、docker-compose常用命令
后台启动容器:docker-compose up -d
查看容器:docker-compose ps
停止容器:docker-compose stop
查看日志:docker-compose logs