当前位置:主页 > 查看内容

Docker快速入门之Docker概念,执行流程以及一些常用指令

发布时间:2021-05-09 00:00| 位朋友查看

简介:文章目录 Docker概念 启动第一个Docker容器 Docker执行流程以及一些配置镜像仓库 常用指令 Dockerfile Docker compose Docker概念 docker进程隔离隔离级别在操作系统层面隔离。 概念 说明 Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板比如……

Docker概念

docker进程隔离,隔离级别在操作系统层面隔离。

概念说明
Docker 镜像(Images)Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container)容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client)Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker RegistryDocker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

同maven一样都统一的仓库远程仓库,以及可以配置自己的本地仓库:远程仓库即为docker hub

启动第一个Docker容器

第一个docker:

docker run hello-world

看见和hello world相关出现即成功。

Docker执行流程以及一些配置镜像仓库

docker启动常规,先Pull镜像,再run 镜像

镜像默认从docker hub拉去,地址为:https://hub.docker.com/

国内有几个镜像可以使用:

  • 科大镜像:https://docker.mirrors.ustc.edu.cn/
  • 网易:https://hub-mirror.c.163.com/
  • 阿里云:https://<你的ID>.mirror.aliyuncs.com
  • 七牛云加速器:https://reg-mirror.qiniu.com

根据不同可参考菜鸟的Docker镜像加速文章:https://www.runoob.com/

如果是使用docker toolbox在config文件里配置

拉取镜像的指令,以mysql为例(mysql5.7,具体写法可参考docker hub的tags里面):

docker pull mysql:5.7

常用指令

docker常用命令:

docker执行命令:docker [options]  commond(具体命令)   ---注意中括号处条件可选填使用

1.辅助命令:

docker info        ----查看docker信息(可看系统层面以及docker镜像下载地址以及镜像等信息)
docker version     ----查看docker版本号,相关的安装信息
docker --help    或者  docker   ----查看docker相关指令帮助

2.images镜像命令:

docker images   ----列出当前docker的所有镜像
docker image ls ----同样也是列出docker的所有镜像
docker images 镜像名 ----过滤,如查Mysql相关的各版本 docker images mysql
docker images -a     -----展示所有镜像,a不写默认也是all
docker images -q     -----展示容器镜像,可组合使用
docker rmi -f $(docker images -q)   ----删除所有镜像和容器
docker pull 镜像名称:版本号   ----拉取镜像最常用方法
docker pull 镜像名:摘要     
docker search 镜像名称:版本号(不带版本号就是最新的)   ----镜像搜索(带OFFICIAL的是官方镜像)
docker image --help    ----查看镜像相关的版本指令
docker image rm 镜像id -f    ----带f强制删除镜像以及容器,不带-f就是只删镜像,如果有实例就不可删除
docker rmi 镜像id(可简写,写前面几位,不和其他id产生歧义即可) -f    ----删除的简略写法(-f同上,强制删除容器以及镜像)
docker save 要导出的镜像名:tar版本号 -o 备份出来的名称:版本号   ----导出镜像
使用案例:docker save mysql:5.7 -o  mysql_5.7.tar(值得注意的是导出的镜像文件名不能使用:冒号)
docker load -i 镜像tar包的文件名     ----导入镜像(docker images查看导入结果)
REPOSITORY       TAG                 IMAGE ID            CREATED             SIZE
mysql            5.7                 d54bd1054823        4 days ago          449MB

REPOSITORY 镜像名称, TAG镜像的版本, IMAGE ID 为镜像唯一id,CREATED为该镜像创建时间不是我们的拉取时间, SIZE为镜像大小

3.contrainer容器命令:(注意挂载端口不止一个的时候可以写多个-p)

docker run 镜像名:版本  或者  镜像id     ----启动镜像生成一个实例容器
docker load  -i 镜像    ----导入镜像 
docker ps        ----查看docker正在运行的容器
docker ps -a     ----查看docker所有容器
docker ps -q	 ----查看正在运行的容器id
docker ps -qa	 ----查看所有容器id
docker run 镜像名:版本  或者  镜像id   ----在docker中启动实例
docker run -p 宿主机端口:容器端口 镜像名:版本  或者  镜像id   ----挂载启动这样外部才能访问
例子如:docker run -p 80:80 nginx   然后访问docker使用的ip,端口号都可
docker run -d -p 宿主机端口:容器端口 镜像名:版本  或者  镜像id   ----后台启动
docker run -d -p 宿主机端口:容器端口 --name 指定容器名 镜像名:版本  或者  镜像id   ----指定名字挂载启动,例如:docker run -d -p 82:80  --name nginx82 nginx
docker stop  容器id  或者 容器的名字   ----停止容器
docker start 容器id  或者 容器的名字	  ----启动容器
docker restart 容器id  或者 容器的名字	  ----重新启动容器
docker rm 容器名称或者容器id -f     ----删除容器实例,-f是强制删除
docker rm -f $(docker ps -aq)    ----删除强制所有容器
docker logs 容器名或容器id         ----查看容器日志
docker logs -f  容器名或容器id     ----查看实时容器日志
docker logs -tf 容器名或容器id     ----加入时间戳实时展示容器日志
docker logs --tail 显示最后几行数 容器名或容器id  ----现在最后的N行的容器日志数
docker top  容器名或容器id      ----查看容器进程数
docker exec -it 容器名或容器id  bash  ----进入容器内部命令行(可使用ls,cd,exit等命令),切记容器必须已经开启
docker commit -m '描述' -a '作者' 容器名或者容器id 新镜像名字:版本号    下面的为例指令如:
docker commit -m 'deploy ruoyi-admin' -a 'calmtho' tomcat02 ry:1.0
将已有容器打包成新的镜像(生成完后使用查看镜像指令,就会发现我们的镜像已经生成了),自己打包的镜像和我们从docker hub下载下来的启动方式是一致的
docker inspect 容器id或者容器名    ----查看容cha器相关的详细信息,如网络等
docker logs -f 容器id            ----查看容器日志

4.操作系统与容器的文件交互

4.1容器详情对照:

CONTAINER ID(容器ID)IMAGE(镜像名)COMMAND(容器内启动使用命令)CREATED(创建容器时间)STATUS(状态)PORTS(端口)NAMES(别名)
20b5faa63625nginx“/docker-entrypoint.…”About a minute agoUp About a minute80/tcpinspiring_poincare

4.2容器交互指令

 docker cp 容器名字或者id:文件全路径 操作系统的路径   ----将文件从容器复制到操作系统(文件目录都可以)
 例子:docker cp dt:/usr/local/tomcat/RUNNING.txt ./RUNNING.txt
 docker cp 宿主机路径 容器名字或者id:容器内文件全路径 ----将文件复制到操作系统(文件目录都可以)
 例子: cp ./unintall.log dt:/usr/local/cp.log
 docker inspect dt    ----看容器信息
 
 
数据卷volumn容器和宿主操作系统交互桥梁,可以共同操作这个目录,容器启动时就必须指定:
docker run -d -p 宿主机端口:容器端口 --name 指定容器名 -v 宿主机路径:容器目录 镜像名:版本 或者  镜像id      (指定目录,如果宿主机这个文件夹有东西会删掉这里面的东西,在容器中使用写操作)
docker run -d -p 宿主机端口:容器端口 --name 指定容器名 -v 一个不存在的目录名:容器目录 镜像名:版本 或者  镜像id     (自动复制有的东西出来和外面挂载,目录自动创建,不写操作)

5.docker的网络连接以及其网桥操作(因为默认是网桥模式,所以是网桥名,实际是网络连接项名称)

docker inspect dt    ----看容器信息(包含该容器的网桥信息)
docker network ls    ----查看网络连接配置
docker network create -d bridge 网桥名称      ----创建网桥(可看见网桥下有的容器)
简写方式:因为docker创建网络连接默认使用网桥       docker network create 网桥名
docker network inspect 网桥名称               ----指定网桥名称,查看具体网桥信息
docker network connect 网桥名称 容器名称        ----指定容器连接指定网桥
docker network rm 网桥名称                     ----删除网桥(需要容器没有运行在此网桥上)
补充一下,如果要让镜像实例容器的时候使用指定网桥的话,可以docker run指令上加入--network 网桥名

6.数据卷

数据卷指令往往是结合容器指令使用的,应该在实例容器的时候结合使用-v 自定义绝对路径或者由系统自动创建

1.数据的作用:
用来实现容器和宿主机之间数据共享
2.数据卷特点
    a.数据卷可以在容器之间共享和重用
    b.对数据卷的修改会立即影响到对应容器
3.一般我们希望宿主机影响容器,不希望容器影响宿主机,可以指令中配置数据卷配置加上:ro(read only只读的意思)

操作数据卷指令:
docker volume ls      ----查看数据卷
docker volume inspect 数据卷名        ----查看数据卷详情

mysql:

docker run --name mysql5.7 -d -p 6700:3306 -v mysql:/var/lib/mysql -e /var/lib/mysql -e MYSQL_ROOT_PASSWORD=root3306 m ysql:5.7.32 
当然还可以指定配置文件启动

redis:

docker run --name redis -d -p 6380:6379 -v redisdata:/data redis:5.0.10 redis-server --appendonly yes

consul:(单节点)

docker run --name consul -d -p 8500:8500 consul

es:值得注意的启动es的时候需要配置相关内存参数,或者去修改配置

docker run -d -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:6.8.0

一般使用的时候需要配置es配置,es数据存储,es插件目录都需要挂载数据卷,甚至可以直接挂载es大的目录,如果没有自定义es的jvm则需要手动修改系统参数

docker run -d -e ES_JAVA_POTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 --name elasticsearch -v D:\docker_v\es\elasticsearch\data:/usr/share/elasticsearch/data   -v D:\docker_v\es\elasticsearch\plugins:/usr/share/elasticsearch/plugins  -v D:\docker_v\es\elasticsearch\config:/usr/share/elasticsearch/config elasticsearch:6.8.0

kibana:指定配置关联的es的url

docker run -d --name kibana -p 5601:5601 -e ELASTICSEARCH_URL=http://ip:9200 kibana:6.8.0

挂载数据卷的形式,然后修改里面的yml文件即可,动态修改ip,修改完,停一下容器后再启动即可

docker run -d --name kibana -p 5601:5601 -v kibanaconfig:/usr/share/kibana/config -e ELASTICSEARCH_URL=http//ip:9200 kibana:6.8.0 

Dockerfile

dockerfile编写:

1.创建一个Dockerfile文件,并且指定自定义镜像信息

Dockerfile文件中常用的内容:
from:指定当前自定义镜像的依赖
copy:将相对路径下的内容复制到自定义的镜像中
workdir:声明镜像的默认工作目录
cmd:需要执行的命令(在workdir下执行的,cmd可以写多个,只以最后一个为准)

例子:
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps

2.将准备号的Dockerfile和相应的文件拖拽到Linux系统中,通过Docker的命令制作镜像

docker build -t 镜像名称[:tag]

Docker compose

docker compose编写:

version: '3.1'
  services:
    mysql:       #服务的名称
      start: always       #代表只要docker启动,那么这个容器就跟着一起启动
      image: daocloud.io/library/ mysql:5.7.4#指定镜像路径
      container_name : mysql #指定容器名称
      ports:
        - 3306:3306 #指定端口号的映射
      environment :
        MYSQL_RO0T_PASSWORD: root  #指定MySQL的ROOT用户登录密码
        TZ: Asia/Shanghai  #指定时区
      volumes :
        - /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql #映射数据卷
    tomcat :
      restart: always
      image: daocloud.io/library/tomcat:8.5.15-jre8
      container_name : tomcat
      ports:
        -8080:8080environment:
      TZ: Asia/Shanghai
      volumes:
        - /opt/docker_mysql_tomcat/tomcat_webapps :/usr/local/tomcat/webapps
        - /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs

在指定目录下使用docker-compose指令,需要在有docker-compose.yml的目录下。如上面文件的/opt/docker_mysql_tomcat/下执行:

1.启动:

docker-compose up -d

2.关闭并删除容器:

docker-compose down

3.开启关闭重启已经存在的docker-compose容器

docker-compose start
docker-compose stop
docker-compose restart

4.查看docker-compose管理的容器

docker-compose ps

5.查看日志

docker-compose logs -f

类似docker指令

使用docker-compose配置Dockerfile使用

docker-compose.yml

version: '3.1'
  services:
    ssm: 
      restart: always
      build: 
        context: ../
        dockerfile: Dockerfile
      image: ssm:1.0.1
      container_name: ssm
      ports:
        - 8081:8080
      environment:
        TZ: Asia/Shanghai

Dockerfile文件:(由上面的配置可知,我们的dockerfile以及war包放在docker-compose的上一级)

from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
#可以直接启动基于docker-compose.yml以及Dockerfile文件构建的自定义镜像
docker-compose up -d
#如果自定义镜像不存在,会帮助我们构建出自定义镜像,如果自定义镜像已经存在,会直接运行这个自定义镜像
#如果要使用重新构建的话。 
#重新构建自定义镜像 
docker-compose build
#运行前,重新构建 
docker-compose up -d --build
;原文链接:https://blog.csdn.net/xtho62/article/details/115449485
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐