对近期docker学习的总结
Docker 总结
1. 说在前头(Docker命令的格式)
docker中的对象分为4个(就目前我所学到的)
- 镜像 image
- 容器 container
- 网络 network
- 数据卷 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 可以查看当前拥有哪些网络类型,通常有一下几种:
- bridge 桥类型,也是默认类型,默认只能通过ip平通
- host 主机类型,和主机共享网络,这样就不必使用端口映射
- 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学习的总结的更多相关文章
- Docker学习总结
本文作为总结性文章,不会详细讲解Docker.但会把已学习的.了解的内容按照由易到难的顺序串起来,更多的是帮助Docker新手快速的了解Docker,知道目前处在哪个阶段,接下来该学些什么,避免碰太多 ...
- Docker学习笔记 — 配置国内免费registry mirror
Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror
- docker学习笔记1 -- 安装和配置
技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...
- docker学习资料整理(持续更新中..)
docker最近可以说火得一踏糊涂,跟 51大神在交流技术的时候这个东西会多次被提到,当我们还玩vm+linux/freebsd的时候,人家已经上升到更高层次了,这就是差距,感觉好高大上的样子,技术之 ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
- Docker学习总结之Run命令介绍
Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 在使用Docker时,执行最多的命令某 ...
- docker~学习笔记索引
回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...
- Docker学习笔记 - Docker容器内部署redis
Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...
- docker学习笔记(一)—— ubuntu16.04下安装docker
docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...
随机推荐
- 新闻网大数据实时分析可视化系统项目——9、Flume+HBase+Kafka集成与开发
1.下载Flume源码并导入Idea开发工具 1)将apache-flume-1.7.0-src.tar.gz源码下载到本地解压 2)通过idea导入flume源码 打开idea开发工具,选择File ...
- scrapy 实现mysql 数据保存
开始用scrapy 爬取数据的时候 开始用同步操作始终会报1064 的错误 因为 mysql 语法和导入的字段不兼容 尝试了 n 次之后 开始用 异步爬取 虽然一路报错 但是还是能把数 ...
- CH8 课后习题
8.1和8.2 #include <iostream> using namespace std; istream& f(istream& in) { int v; in & ...
- git log format
默认git log 出来的格式并不是特别直观,很多时候想要更简便的输出更多或者更少的信息,这里列出几个git log的format. 可以根据自己的需要定制. git log命令可一接受一个--pre ...
- Samjia 和矩阵[loj6173](Hash+后缀数组)
传送门 本题要求本质不同的子矩阵,即位置不同也算相同(具体理解可以看样例自己yy). 我们先看自己会什么,我们会求一个字符串中不同的子串的个数.我们考虑把子矩阵变成一个字符串. 先枚举矩阵的宽度,记为 ...
- firewalld学习-zone
原文地址:http://www.excelib.com/article/290/show firewalld默认提供了九个zone配置文件: block.xml.dmz.xml.drop.xml.ex ...
- day05-Python运维开发基础(双层循环、pass/break/continue、for循环)
# ### 双层循环练习 # 十行十列小星星 j = 0 while j<10: # 逻辑代码写在下面 # 打印一行十个小星星 i = 0 while i<10: print(" ...
- RIOT笔记
RIOT笔记 2016-04-25 [资源] 维基 https://github.com/RIOT-OS/RIOT/wiki 代码 https://github.com/RIOT-OS/RIOT 网页 ...
- Docker基础——从入门到精通
一个完整的docker由几个部分组成? docker client docker daemon docker images docker containers 容器是一个存储.运输工具,它能对容器内 ...
- 洛谷 P3801 红色的幻想乡
题目背景 蕾米莉亚的红雾异变失败后,很不甘心. 题目描述 经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放. 我们将幻想乡看做是一个n*m的方格地区,一 ...