【Docker 基础内容 01】

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 -

如果安装报如下的错

 

解决办法:

yum erase podman buildah

https://blog.csdn.net/a15608445683/article/details/122452321

4、启动/关闭docker服务

systemctl start docker
systemctl stop docker

开机自启
systemctl enable docker

 四、docker基本命令

1、搜索镜像

docker search [imageName]

 2、拉取镜像

docker pull {imageName}[:{imageTag}]

imageName:镜像名称
imageTag:标签其实也就是版本

具体如何看imageTag,我们可以通过docker的官网

https://hub.docker.com/

-->然后在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 -l

  查看所有历史容器:docker ps -a

6、查看docker容器日志

docker logs -f {容器id}
 sudo docker logs -f --tail=1000 {容器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:用于执行后面跟着的命令行命令。

Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在构建镜像的过程中完成的。

COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源
并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。

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/v2.16.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

上面不能用的话,可以用下面的
curl -L https://github.com/docker/compose/releases/latest/download/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

导出镜像

docker save <myimage>:<tag> | gzip > <myimage>_<tag>.tar.gz

导入镜像

gunzip -c <myimage>_<tag>.tar.gz | docker load

 

posted @ 2021-01-21 16:23  尘封~~  阅读(125)  评论(0编辑  收藏  举报