Docker快速入门之Docker概念,执行流程以及一些常用指令-程序员宅基地

技术标签: windows  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 Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker 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(别名)
20b5faa63625 nginx “/docker-entrypoint.…” About a minute ago Up About a minute 80/tcp inspiring_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
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xtho62/article/details/115449485

智能推荐

webpack 配置_webpack设置 require-程序员宅基地

文章浏览阅读602次。corejs处理,在项目根目录下的 babel.config.js 文件配置。webpack.config.js文件。babel.config.js文件。记录学习 webpack 的过程。.eslintrc.js 文件。_webpack设置 require

Vue组件详解-程序员宅基地

文章浏览阅读454次。文章目录什么是组件?模块化与组件化组件定义命名规则创建组件的方式方式一方式二方式三组件的唯一性什么是组件?什么是组件:组件的出现,就是为了拆分vue实例的代码里的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可模块化与组件化名称概念模块化是从代码逻辑角度进行划分的;方便代码的分层开发,保证每个功能模块的职能单一组件化是从UI界面的角度进行划分的;前端的组件化,方便UI组件重用组件定义命名规则推荐全小写,然后

图像分类篇——使用pytorch搭建ResNet网络_resnet实战:使用resnet实现图像分类(pytorch)-程序员宅基地

文章浏览阅读2.7k次,点赞6次,收藏40次。目录1. ResNet网络详解1.1 ResNet网络概述1.2 Batch Normalization1.3 residual结构1.4 ResNet结构和详细参数1.5 迁移学习2. Pytorch搭建本文为学习记录和备忘录,对代码进行了详细注释,以供学习。内容来源:★github:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing★b站:https://space.bilibili.com/18161609/chan_resnet实战:使用resnet实现图像分类(pytorch)

Beautiful Soup之find()和find_all()的基本使用_soup.find_all-程序员宅基地

文章浏览阅读1w次,点赞17次,收藏66次。1.HTML文本这里以官方文档提供的html代码来演示Beautiful Soup中find_all()和find()的基本使用。<html><head><title>The Dormouse's story</title></head><body><p class="title"><b>The Dormouse's story</b></p><p class="stor_soup.find_all

chatgpt赋能python:Python中升序和降序排序:什么是升序和降序以及如何使用Python进行排序_python中降序和逆序有什么区别-程序员宅基地

文章浏览阅读528次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python中降序和逆序有什么区别

Django使用 haystack+whoosh实现搜索功能,并返回json数据_django填加whoosh backend-程序员宅基地

文章浏览阅读228次。【代码】Django使用 haystack+whoosh实现搜索功能,并返回json数据。_django填加whoosh backend

随便推点

【轮式平衡机器人】——TMS320F28069片内外设之Timer_IT(补:CCS程序烧录方法)_机器人人烧录程序调试过程-程序员宅基地

文章浏览阅读1.1k次,点赞27次,收藏24次。TMS320F28069 的定时器中断功能。在微控制器或数字信号控制器中,定时器是一个非常重要的外设,它可以用来产生固定时间间隔的中断,或者用来精确计算时间。_机器人人烧录程序调试过程

计算机输入法无法启动,Win7系统开机后输入法总是消失如何解决-程序员宅基地

文章浏览阅读1.2k次。输入法是我们在使用电脑的时候经常会用来输入文字的工具,一般在开机的时候都会自动启动并在任务栏右下角显示,可是有不少win7系统用户却遇到开机后输入法总是消失的情况,要怎么解决呢?现在为大家带来Win7系统开机后输入法总是消失的详细解决步骤。1、在win7系统中点击“开始”--“运行”输入--regedit,打开“注册表编辑器”,找到“HKEY_USERS\.DEFAULT\ControlPanel..._开机输入法消失

手把手教你利用ORB_SLAM2制作自己的数据集(手机拍摄即可,不需要ROS)_orbslam2 自己的视频-程序员宅基地

文章浏览阅读633次,点赞7次,收藏14次。利用ORB_SLAM2运行自己数据集_orbslam2 自己的视频

filter函数回数是指从左向右读和从右向左读都是一样的数,例如12321,909。_回数的函数名称是什么-程序员宅基地

文章浏览阅读833次。def is_palindrome(n): arr = [] while n&amp;gt;0: arr.append(n % 10) n //= 10 l = len(arr) for i in range(0, len(arr)//2): if arr[i] != arr[l-i-1]: retu..._回数的函数名称是什么

C/C++坦克大战项目-程序员宅基地

文章浏览阅读4.8k次,点赞10次,收藏48次。本次坦克大战项目已实现的功能背景音效,动画界面,各级菜单选项,暂停游戏,重新开始,储存与读取游戏进度。单人,双人(闯关模式) (自定义游戏),双人联机模式每辆坦克独立的HP,MP,移动速度,攻击CD,自动回HP,MP,3种不同的炮弹攻击针对BOSS的自动寻找玩家并攻击。使用A星算法。各种类型食物:无敌,攻击翻倍,全屏秒杀,无限子弹,全场冰冻。各种类型敌人:4种按等级区分的普通敌人,1种...

北京54或国家80或CGCS2000转WGS84坐标系的程序实现方法_cgcs2000转换到wgs84 c# 代码-程序员宅基地

文章浏览阅读3.9k次,点赞10次,收藏17次。介绍在工程测量中,经常使用的坐标系如北京54坐标系、国家80(也叫西安80)坐标系、CGCS2000坐标系。而在终端设备或定位平台中,一般使用WGS84坐标系。这样的情况下,就需要一种北京54、国家80、CGCS2000转WGS84坐标系的通用程序方法。而我们使用的就是布尔莎七参数法来进行的程序转换。通过使用C++程序,从而得到平台需要的wgs84坐标。布尔莎七参数标准的七参数转换方法,使用X、Y、Z平移,X、Y、Z旋转,K尺度,这七个参数,在已知三个以上点的情况下,来计算七参数模型。具体七参数计_cgcs2000转换到wgs84 c# 代码

推荐文章

热门文章

相关标签