Docker 的基本使用
一、简介
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 的基本使用的更多相关文章
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- Docker 第一篇--初识docker
已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...
- 在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 ...
- docker for mac 学习记录
docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...
- scrapy爬虫docker部署
spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...
- [原][Docker]特性与原理解析
Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...
- 开发者的利器:Docker 理解与使用
困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...
- 使用python自动生成docker nginx反向代理配置
由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...
- 微服务与Docker介绍
什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...
随机推荐
- ps图片怎样实现渐变
首先我先将一副图片展示给大家: 我所做的效果是想把图片做成渐变.而不改变中间图片的颜色效果. 接下来我来说明一下我的所做思路. 首先将图片中间部分选择出来.然后复制成一个图层. 详细操作是用魔棒进行反 ...
- UVA-10163 Storage Keepers DP
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- struts2开发中一些概念的理解
对象关系映射(orm)中的两个概念 VO 和 PO: 它们都包含一些属性及这些属性的get/set方法 1.VO:是值对象,可以理解为业务对象,存活在业务层,供业务逻辑使用,当前业务逻辑需要一组什么数 ...
- 第一次PHP面试题
1.标记符title是放在标记符什么之间:head 2.级联样式表文件的扩展名:CSS 3.html中<pre>的作用:pre 元素可定义预格式化的文本 4.mysql_affected_ ...
- HDU 5371(2015多校7)-Hotaru's problem(Manacher算法求回文串)
题目地址:HDU 5371 题意:给你一个具有n个元素的整数序列,问你是否存在这样一个子序列.该子序列分为三部分,第一部分与第三部分同样,第一部分与第二部分对称.假设存在求最长的符合这样的条件的序列. ...
- SGU 145
节点不可重复经过的K短路问题. 思路:二分路径长度,深搜小于等于路径长度的路径数.可以利用可重复点K短路问题中的A*函数进行剪枝. 尝试另一种解法:把可重复点K短路A*直接搬过来,堆中的每个元素额外记 ...
- 动态更改Menu
好像没有现成的api可能获取menu完美方法,只有在创建menu时,用全局的menuItem记下, 在需要修改时修改. 1)全局量: MenuItem gMenuItem=NULL; 2)//创建菜 ...
- 9 Range 实用操作
9.1 剪切.复制和粘贴来移动数据 sourceRange.Cut [Destination] 如果指定Destination,相当于Ctrl^X(sourceRange) & Ctrl^V( ...
- nginx配置改变默认访问路径
在安装完nginx服务后,url访问的默认路径是安装的路径html文件夹下的内容,如果需要指定自定义的路径,需要配置nginx.conf文件内容,这样通过url访问就可以了,比如: http://12 ...
- jQuery EasyUI,LinkButton(按钮)组件
转自:https://www.cnblogs.com/adc8868/p/6639570.html jQuery EasyUI,LinkButton(按钮)组件 学习要点: 1.加载方式 2.属性列表 ...