一、简介

Docker 是一个开源的应用容器引擎,基于 Go 语言。Docker 支持将软件编译成一个镜像,然后在镜像中为软件做好配置,将镜像发布出去,其他使用者就可以直接使用这个镜像,而不需再和以前一样配置各种环境。Docker 容器是完全使用沙箱机制,相互之间不会有任何的接口。其实它和我们使用的虚拟机很像,都采用了虚拟化的技术,不过相较于虚拟机而言,它的占用资源较少、启动更快。我们使用 Docker 安装运行的软件,其实都是运行在一个个独立的 “小型虚拟机”之上的,每个软件就是单独的容器,容器的启动和停止就对应着软件的启动和停止。

二、核心概念

Docker 主机(Host):安装了 Docker 程序的机器。

Docker 客户端(Client):连接 Docker 主机进行操作的机器。

Docker 仓库(Registry):存放了各种已经打包好的软件镜像。

Docker 镜像(Images):软件打包而成的镜像。

Docker 容器(Container):镜像启动后的实例称为一个容器,能够真正运行的软件。

三、例子(含常用命令)

我以在阿里云服务器(Cent OS 7)使用 Docker 安装 MySQL 为例来使用一些常用的命令。

1、安装 Docker

yum install docker

2、使用 Docker 在仓库中搜索镜像

root@xxx:~# docker search mysql
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/mysql MySQL is a widely used, open-source relati... 7641 [OK]
docker.io docker.io/mariadb MariaDB is a community-developed fork of M... 2492 [OK]
docker.io docker.io/mysql/mysql-server Optimized MySQL Server Docker images. Crea... 579 [OK]
docker.io docker.io/zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 158 [OK]
docker.io docker.io/hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 103
docker.io docker.io/zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server ... 84 [OK]
docker.io docker.io/centurylink/mysql Image containing mysql. Optimized to be li... 59

推荐去 Docker Hub 官网 上去搜索镜像,还可以看到镜像的 tags:

3、下载 MySQL 镜像

docker pull mysql  #默认下载最近的
# 也可加上标签下载 docker pull mysql:5.7.24

4、显示当前 Docker 中的所有镜像

root@xxx:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql latest 102816b1ee7d 8 days ago 486 MB
docker.io/redis latest 5d2989ac9711 8 days ago 95 MB
docker.io/rabbitmq latest e8261c2af9fe 2 months ago 125 MB
docker.io/elasticsearch latest 5acf0e8da90b 3 months ago 486 MB

5、将镜像实例化成一个容器

root@xxxx:~# docker run --name mysql01 -e MYSQL_PASSWORD=123456 -d mysql
caa85f6d4d3e4e2ca3e5135ef63ff44393640bef0fd6254c2ef31fc29f6b7e26

使用 docker run + 镜像 ID(或者名字)就可以将镜像实例化成容器,其中命令参数 --name 是给容器起名字,

-d 是后台运行。而我上面的 -e 参数是为了能正确使用 MySQL 而设置密码。建议大家将镜像实例化的这个过程中,还是去看相应镜像的官方提供的文档,以便正确实例化镜像。

6、查看所有的容器

root@xxx:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
caa85f6d4d3e mysql "docker-entrypoint..." 8 minutes ago Exited (1) 8 minutes ago mysql01

不加上 -a 选项的话是查看正在运行的容器。

7、停止容器

root@xxxx:~# docker stop mysql01
mysql01

也可以使用容器 ID 来停止,查看所有正在运行的容器:

root@xxx:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

8、启动容器

root@xxx:~# docker start mysql01
mysql01

查看所有正在运行的容器:

root@xxx:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

纳尼?没有,不急,演示效果需要。

9、查看对应容器的日志

root@xxx:~# docker logs mysql01
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

哦,都说了看官方的文档啊,还是不听!原来是上面 docker run 时的 -e 参数的值没有写对,应该是MYSQL_ROOT_PASSWORD而我写的是MYSQL_PASSWORD,-_-||,所以接下来就重新来吧。

10、删除容器

删除错误的容器

root@xxx:~# docker rm mysql01
mysql01

删除镜像是 docker rmi 加上镜像 ID。实例化镜像:

root@xxx:~# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
7caa8d461829cb384599aa942fc16f15b4b25a3bd57d5846597ab33028bea620

查看正在运行的容器:

root@xxx:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7caa8d461829 mysql "docker-entrypoint..." About a minute ago Up About a minute 3306/tcp, 33060/tcp mysql01

ok,成功了。

11、在阿里云服务器使用这个 MySQL 容器

root@xxx:~# docker exec -it mysql01 bash
root@7caa8d461829:/#

上面命令的意思可以参考官方文档:

也符合 Docker 沙箱隔离的原则,在 MySQL 容器里开启 shell,即相当于 MySQL 容器内部里面有一个“虚拟机”,在这里面执行相应的 MySQL 操作。使用 mysql 命令连接 MySQL 服务器:

root@7caa8d461829:/# mysql -h 127.0.0.1 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.13 MySQL Community Server - GPL Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec) mysql>

Docker 的基本使用的更多相关文章

  1. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  2. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  3. Docker 第一篇--初识docker

    已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...

  4. 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)

    环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...

  5. docker for mac 学习记录

    docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...

  6. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  7. [原][Docker]特性与原理解析

    Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...

  8. 开发者的利器:Docker 理解与使用

    困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...

  9. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

  10. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

随机推荐

  1. 2016/1/17 private public protected 权限练习

    package caipiao; private class Test0117 { private String title; public String actor; protected Strin ...

  2. 【Silverlight】Bing Maps学习系列(七):使用Bing Maps的图片系统(Tile System)

    [Silverlight]Bing Maps学习系列(七):使用Bing Maps的图片系统(Tile System) 目前包括微软必应地图在内的几乎所有在线电子地图(如:Google Maps等)都 ...

  3. Potentiometers

    题意: 线段树的单点修改,区间查询 #include <map> #include <set> #include <list> #include <cmath ...

  4. 【CSU 1756】Prime

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1756 直接暴力O(n^2logn)过不了 两两算gcd 考虑每个数的范围[1,1000]统计一下即 ...

  5. 【172】outlook邮箱设置

    参考:outlook 2013设置 参考:Outlook设置hotmail邮箱POP3和SMTP服务器 注意

  6. 4-3 买家类目-service

    DAO:ProductCategory.Service可以简化一些,叫CategoryService. package com.imooc.sell.service; import com.imooc ...

  7. HTML5牛刀小试

    第一周的HTML5苦逼之路,就这么简单,充实,忙碌的开始了,丝毫不敢有一丢丢懈怠,压力是有的,但更多的是对自己的信心,更是对自己的踏上苦逼之路的意志的肯定. 简单回顾了下这周所学内容.从认识HTML基 ...

  8. bzoj 1718: [Usaco2006 Jan] Redundant Paths 分离的路径【tarjan】

    首先来分析一下,这是一张无向图,要求没有两条路联通的点对个数 有两条路连通,无向图,也就是说,问题转化为不在一个点双连通分量里的点对个数 tarjan即可,和求scc还不太一样-- #include& ...

  9. 【题解】自行车比赛 [AHOI2016] [P2777]

    [题解]自行车比赛 \([AHOI2016]\) \([P2777]\) 逼自己每天一道模拟题 传送门:自行车比赛 \([AHOI2016]\) \([P2777]\) [题目描述] 比赛中一共有 \ ...

  10. 2017西安网络赛B_Coin

    样例输入 2 2 1 1 3 1 2 样例输出 500000004 555555560 思路: n重伯努利实验概率分布题. 设q=1-p,p为事件概率. Y为出现偶数次的概率. 所以  Y=1/2*( ...