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. 配置solrcloud

    1.1   Zookeeper集群的搭建 1.1.1   前台条件 三个zookeeper实例.Zookeeper也是java开发的所以需要安装jdk. 1.Linux系统 2.Jdk环境. 3.Zo ...

  2. 前端学习笔记系列一:8 <noscript>…</noscript>,网站路径,vscode跳出右括号

    1.<noscript>…</noscript> 在body中使用此段代码,可识别 <script> 标签但无法支持其中的脚本的浏览器. 此段代码意思为如果浏览器不 ...

  3. 十七 Ajax&校验用户名功能

    Ajax: 即"Asynchronous JavaScript And XML", 异步JavaScript和XML , 是指一种创建的交互式页面应用的网页开发技术,它并不是新的技 ...

  4. 【pwnable.tw】 applestore

    做到这道题的时候正赶上iPhone 8上市,撒花~(虽然不知道为啥) 程序分析: 先进到main函数,比较简单. myCart位于bss段上,是一个长度为0x10. 主要的处理函数是handler函数 ...

  5. Linux基础命令之——边边角角

    linux基础指令的内容较多,总共一百多条,包含一些服务120条左右(误差不超过一个亿),选项也五花八门,但是有些较为实用的命令或者选项在使用的过程中又会一时想不起来,降低了工作效率. 因此,专门做一 ...

  6. 基于vue-router的移动端网页的路由管理

    本篇代码示例:github 前提:不关注移动端浏览器的前进事件 涵盖功能: 1,管理路由的历史记录 2,切页动画的实现 3,处理流程类页面的回退事件 描述:    流程类页面的回退事件的解释: 以注册 ...

  7. XV6源代码阅读-文件系统

    Exercise1 源代码阅读 文件系统部分 buf.h fcntl.h stat.h fs.h file.h ide.c bio.c log.c fs.c file.c sysfile.c exec ...

  8. Python入门必学知识,30万年薪Python工程师带你学

    Python是一种计算机编程语言.计算机编程语言和我们日常使用的自然语言有所不同,最大的区别就是,自然语言在不同的语境下有不同的理解,而计算机要根据编程语言执行任务,就必须保证编程语言写出的程序决不能 ...

  9. 二次urldecode注入

    原理大多数web程序都会对输入字符进行转换,例如addslashes(),mysql_real_escape_string(),mysql_escape_string(),也就是对单引号',双引号&q ...

  10. windows上使用git

    开始的时候同事只给了一个地址,类似这样:git@111.111.1.1:ABCDEF (1)如何在Windows上使用Git 有一篇博客不错:http://www.tuicool.com/articl ...