Docker 总结

1. 说在前头(Docker命令的格式)

docker中的对象分为4个(就目前我所学到的)

  1. 镜像 image
  2. 容器 container
  3. 网络 network
  4. 数据卷 volume

docker 对不同对象的操作格式为

docker (对象类型) (命令) [参数] (对象名)

比如,删除一个名为mysql的容器

docker container rm mysql

这些命令有:

命令 功能
rm 删除
inspect 查看详细信息
start 启动容器
stop 关闭容器
create 创建
ls 列出

2.容器

创建容器

创建并运行一个容器的命令为

docker run --name [名字] -d 镜像名:标签 一些要执行的命令

如果不加执行命令,容器会执行dockerfile里指定的命令(如果存在)

比如:

docker run --name mysql -d mysql:5.7

这里基于mysql 5.7创建了一个容器并取名为mysql,并且使其后台运行(-d)

镜像名后不跟标签默认为latest


run改成create则为创建容器不运行

start命令启动容器

stop命令停止容器


列举一些参数

参数名 功能 列举
--name 给容器取名字 --name mysql
-d 后台运行容器 -d
-e 指定环境变量 -e MYSQL_ROOT_PASSWORD=123
-v 设置数据卷 -v mysql:/var/lib/mysql
--network 这是网络(默认bridge) --network host
-p 映射端口 -p 80:80
-P 映射所有开放端口到本地(随机) -P
--link 连接到某个已存在的容器,方便使用容器名访问 --link mysql

进入容器

常用命令为

docker exec -it 容器名 /bin/bash

exec为执行命令的命令

-it就是 -i-t ,-i表示标准输入保持打开,-t表示分配一个伪终端

这里执行的命令为/bin/bash,一般的容器都带有bash,有些则用sh

查看容器详细信息

docker container inspect 容器名

网络

通过命令docker network ls 可以查看当前拥有哪些网络类型,通常有一下几种:

  1. bridge 桥类型,也是默认类型,默认只能通过ip平通
  2. host 主机类型,和主机共享网络,这样就不必使用端口映射
  3. none 不指定任何网卡,只有lo

使用bridge的两个网络通过ip可以ping通.若使用--link来创建容器时可以通过容器名ping通,但这是单向的,例:

已存在容器a,创建容器b时指定--link a则在容器b使用命令ping a可以ping通,在a里使用命令ping b则不行

一种特殊情况,

可以创建一个自己的网络指定类型为bridge,再创建几个容器连接到自己创建的网络上,则这些容器可以通过名字互相ping通.例:

docker network create -d bridge my_bridge

注:这里的-d为指定网络的类型

数据卷

数据卷一般用于数据持久化,下面以dockerhub官方的mysql镜像为例,

查看mysql的dockerfile可以看到VOLUME /var/lib/mysql这一行,说明mysql将数据存储在容器中的/var/lib/mysql目录下,并自动挂载到一个主机的目录可以inspect容器或者volume(启动一个mysql容器会产生一个volume,可以用docker volume ls查看)就可以看到详细的目录.但是自动生成的volume名字十分冗长,

修改volume的名字

docker run --name mysql1 -d -v mysql_v_name:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1 mysql

上面的命令是常见的启动mysql容器的命令,其中-v mysql_v_name:/var/lib/mysql命令指定了本地的挂载点:前面就是本地的目录,后面就是容器里的目录(可以通过dockerfile查看),相当于重命名

通过inspect可知道全路径为:"/var/lib/docker/volumes/mysql_v_name/_data"

这样的优点

创建第二个容器

docker run --name mysql2 -d -v mysql_v_name:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1 mysql

注意这里的-v后面指定的名字是前一个容器的挂载点,这样一来,前一个容器删除后,第二个容器可以接着使用第一个容器的数据.

共享主机的文件夹

注意一个原则,我们尽量不要在容器里面操作,应当在外面通过命令来操控容器,通常情况下,容器是不带vim或其他文本编辑工具的,所以一种有效的的办法是通过主机和容器共享一个文件夹,这样一来就可以在主机里通过vim等工具来编写代码.

docker run --name test -d -v /home/kainhuck/Documents/PyCode:/temp/PyCode python:3.7

这里创建一个Python3.7的容器,并将本地文件夹/home/kainhuck/Documents/PyCode关联到容器里的/temp/PyCode目录.

这种方式关联的文件相当于同一个文件,操作均为同步,里面修改,外面也会修改.

对近期docker学习的总结的更多相关文章

  1. Docker学习总结

    本文作为总结性文章,不会详细讲解Docker.但会把已学习的.了解的内容按照由易到难的顺序串起来,更多的是帮助Docker新手快速的了解Docker,知道目前处在哪个阶段,接下来该学些什么,避免碰太多 ...

  2. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  3. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  4. docker学习资料整理(持续更新中..)

    docker最近可以说火得一踏糊涂,跟 51大神在交流技术的时候这个东西会多次被提到,当我们还玩vm+linux/freebsd的时候,人家已经上升到更高层次了,这就是差距,感觉好高大上的样子,技术之 ...

  5. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  6. Docker学习总结之Run命令介绍

    Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 在使用Docker时,执行最多的命令某 ...

  7. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

  8. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  9. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

随机推荐

  1. 四、java基础-面向过程_对象_类中可出现的因素

    1.面向过程和面向对象区别: 1)面向过程:开发一个应用程序.一个项目,必须先了解整个过程,了解各个步骤.模块间的因果关系,使的面向过程方式去开发程序时,代码和代码之间的关联程度是非常强.所以其中任何 ...

  2. emWin 模拟器环境搭建

    转载http://www.nxpic.org/module/forum/thread-609329-1-1.html 这个模拟器工程在Segger官网下载:https://www.segger.com ...

  3. Spring事务服务

    Spring事务服务 (2013-07-22 11:13:36) 转载▼ 标签: 事务管理 ssh 分类: Sping Spring为事务管理提供了一流的支持.同时支持编程式事务和声明式事务.无论是编 ...

  4. 三 PrePareStatement注入,DELETE和TRUNCATE

    PreparedStatement PreparedStatement是一个接口,它继承了Statement,该接口有以下几个优点: 性能比Statement高,会把sql预编译 可以解决sql注入问 ...

  5. 十一 JSP&EL&JSTL

    1 什么是JSP? 从用户角度看待,是一个网页从程序员角度,其实是一个Java类,他继承了Servlet,所以可以直接说JSP就是一个Servlet 为什么会有JSP?html多数情况下用来显示静态内 ...

  6. 整合Spring时Service层为什么不做全局包扫描详解

    合Spring时Service层为什么不做全局包扫描详解 一.Spring和SpringMVC的父子容器关系 1.讲问题之前要先明白一个关系 一般来说,我们在整合Spring和SpringMVC这两个 ...

  7. Matplotlib 饼图

    章节 Matplotlib 安装 Matplotlib 入门 Matplotlib 基本概念 Matplotlib 图形绘制 Matplotlib 多个图形 Matplotlib 其他类型图形 Mat ...

  8. Codeforces 1294D - MEX maximizing

    思维,真的很巧妙啊,看了以下博客 https://www.cnblogs.com/stelayuri/p/12230033.html

  9. 第1课 VMware的NSX全面落地软件定义网络SDN

    SDN的定义: 即软件定义网络(Software Defined Network)的缩写,它是一种基于网络架构的创新,一种在已存在物理传输网络之上的抽象形态,它是一种体系结构,它是众多网络虚拟化技术中 ...

  10. bugku love

    emmm....控制台运行一下 接着查一下是否有壳 显示是没有壳的,接着查看一下结构 也没有什么发现,上ida看一下吧,顺便说一句每个人的解题思路都不一样.面对一开始都不清楚的结构我会选择交叉引用这样 ...