一、简介

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. JavaScript你所不知道的困惑(1)

    困惑一: 先看一个样例: function test(){ message = "hi"; } test(); alert(message); 会输出字符串"hi&quo ...

  2. 1.jdk安装和环境配置

    这个简单,但是记不住,非要网上搜一遍不可: 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Progr ...

  3. Bootstrap popover源码分析

    /* ======================================================================== * Bootstrap: popover.js ...

  4. beego2---入门

    package main //beego既可以建立web应用也可以建立api应用 //beego是一个gohttp服务器的高层封装, import ( _ "beego1/routers&q ...

  5. Codeforces Round #311 (Div. 2)C. Arthur and Table

    C. Arthur and Table time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. Massive Data Mining学习记录

    第一周: 学习PageRank, 知识点:每个节点的权值由其他节点的投票决定,所有节点的权值和为1 当节点很多时候必须转换成矩阵运算来计算节点的最终值,由马尔可夫链可以证明,这个值可以迭代得到 问题: ...

  7. YTU 2642: 填空题:类模板---求数组的最大值

    2642: 填空题:类模板---求数组的最大值 时间限制: 1 Sec  内存限制: 128 MB 提交: 646  解决: 446 题目描述   类模板---求数组的最大值    找出一个数组中的元 ...

  8. hdu 5074 Hatsune Miku DP题目

    题目传送门http://acm.hdu.edu.cn/showproblem.php?pid=5074 $dp[i][j] =$ 表示数列前$i$个数以$j$结尾的最大分数 $dp[i][j] = - ...

  9. luogu 1966 火柴排队

    题目大意: 两列数,可以交换每列中相邻的两个数,算作一次交换 求最小的交换次数使两列数相对应的数之差的平方之和最小 思路: 首先可以明确当两列数的排序位置相对应时,为最佳答案 然后我们按照一中排序后在 ...

  10. js实现IOS上删除app时颤抖动画j函数

    欢迎提供更好的方法! <!--http://www.cnblogs.com/webzhangnan/p/3244920.html --> <html> <head> ...