简介
Docker是一个开源的应用容器引擎
Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像
运行中的这个镜像称为容器,容器启动时非常迅速的。
核心概念:
- docker主机(Host):安装了docker程序的机器(Docker直接安装在操作系统之上的)
- docker客户端(Client):链接docker主机进行操作的 docker仓库(Registry):用来保存各种打包好的软件镜像
- docker镜像(Images):软件打包好的镜像,放在仓库中
- docker容器(Container):镜像启动后的示例成为一个容器,容器是独立运行的一个或一组应用
创建步骤:
- 安装好docker
- 去docker仓库找到软件对应的镜像
- 直接使用docker运行这个镜像这个镜像就会生成一个docker容器
- 对容器的启动停止就是对软件的启动停止
docker安装(在linux上)
在linux上安装docker比较简单,正常情况下只需要使用yum命令即可,但有几点需要注意一下:
有些教程写安装docker使用:
yum install docker
但亲测发现,使用该命令下载后,docker无法启动,故需要使用:
yum -y install docker-io
这里可能会发生报错:
No package docker-io available.
错误:无须任何处理
表示yum没有找到docker包,有其他教程说使用yum install epel-release更新库即可,我在安装时,执行yum install docker前用这个命令可以下载,但我们之前说了,下载docker是没有办法启动的,执行yum -y install docker-io时,更新库的办法是无效的。
所以应该使用下载源安装的方式:
yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
等待install成功即可,到此,docker已安装成功。
启动docker(as6)
service docker start
docker常用命令:
docker search 查询镜像
docker pull 下载镜像
docker images 查看镜像
docker rmi images-id 删除镜像
下面以mysql为例讲解如何安装
首先先查询一下可用的mysql:
[root@Centos6x64 ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relati... 9444 [OK]
mariadb MariaDB is a community-developed fork of M... 3404 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Crea... 691 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 75
mysql/mysql-cluster Experimental MySQL Cluster Docker images. ... 67
centurylink/mysql Image containing mysql. Optimized to be li... 61 [OK]
deitch/mysql-backup REPLACED! Please use http://hub.docker.com... 41 [OK]
bitnami/mysql Bitnami MySQL Docker Image 39 [OK]
tutum/mysql Base docker image to run a MySQL database ... 35
schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic back... 29 [OK]
prom/mysqld-exporter 27 [OK]
linuxserver/mysql A Mysql container, brought to you by Linux... 25
centos/mysql-56-centos7 MySQL 5.6 SQL database server 19
circleci/mysql MySQL is a widely used, open-source relati... 19
databack/mysql-backup Back up mysql databases to... anywhere! 17
mysql/mysql-router MySQL Router provides transparent routing ... 15
arey/mysql-client Run a MySQL client from a docker container 14 [OK]
openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 ima... 6
fradelg/mysql-cron-backup MySQL/MariaDB database backup using cron t... 6 [OK]
genschsa/mysql-employees MySQL Employee Sample Database 5 [OK]
devilbox/mysql Retagged MySQL, MariaDB and PerconaDB offi... 3
ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 2 [OK]
jelastic/mysql An image of the MySQL database server main... 1
widdpim/mysql-client Dockerized MySQL Client (5.7) including Cu... 0 [OK]
monasca/mysql-init A minimal decoupled init container for mysql 0
使用pull命令下载mysql(默认下载latest版本):
[root@Centos6x64 ~]# docker pull mysql
latest: Pulling from mysql
e621dc7f5dcb: Pull complete
6cb216111959: Pull complete
798af5f94c76: Pull complete
899cc754e057: Pull complete
d58981144711: Pull complete
d5f06b6846af: Downloading [=====> ] 155.7 kB/1.419 MB
8e66e8171818: Download complete
d30a7c52f60f: Downloading [=========> ] 2.636 MB/13.44 MB
9e206409df13: Download complete
65f574158b71: Download complete
8a15c0e8d158: Download complete
18e73f1a0980: Download complete
d1f89aeaee69: Downloading [=========> ] 20.95 MB/111.5 MB
d1f89aeaee69: Downloading [=========> ] 21.49 MB/111.5 MB
b369d870a220: Download complete
53b1039660ef: Download complete
a611cdbfc577: Download complete
f7c1ee13f2c9: Download complete
832fb4feff47: Download complete
642c6f7a4262: Download complete
下载正常结束后,使用docker images
查看已经下载好的镜像:
[root@Centos6x64 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mysql latest 642c6f7a4262 4 days ago 540.6 MB
tomcat latest 052a153114e9 7 days ago 647.2 MB
镜像下载至此就完成了,没什么意外的话就可以启动了。
我第一次启动的时候遇到了一点小问题,在这里也一起分享下,避免大家一起踩坑。
启动镜像使用docker run命令,当然,具体参数查文档会更方便一点,我这里主要是分享一下踩坑经验。我执行了下面的语句来启动镜像:
[root@Centos6x64 ~]# docker run --name mysql01 -d mysql
8c9da563fd79a331c7076db1a2a34e33eb4b5a8fbca74ddd77f14a32decc02db
看起来好像启动成功了,然鹅并没有,我们可以用docker ps查询一下
[root@Centos6x64 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
正常情况下,docker ps
命令会列出启动成功的镜像,但我们发现上面的执行结果什么都没有,再用docker ps -a
查看一下
[root@Centos6x64 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c9da563fd79 mysql "docker-entrypoint.s About a minute ago Exited (1) About a minute ago mysql01
很显然,启动失败了,这时候,可以根据启动命令时返回的id查询一下对应的log
FATAL: kernel too old
这个报错是指我们的内核版本太老了…得升级,于是执行了下面的这一堆:
#更新nss(网络安全服务)
yum -y update nss
#升级内核需要elrepo的yum源,所以安装其源时,先导入elrepo的key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
#安装elrepo源lt内核
yum --enablerepo=elrepo-kernel -y install kernel-lt
#修改/etc/grub.conf文件,将default=1修改成default=0
vi /etc/grub.conf
#保存退出重启
reboot
再查看内核,发现版本已经变了uname -r
这下应该可以了吧,然鹅,ps之后还是什么都没有,再次查看日志发现
[root@Centos6x64 ~]# docker logs 8c9da563fd79a331c7076db1a2a34e33eb4b5a8fbca74ddd77f14a32decc02db
2020-05-02 02:27:54+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.20-1debian10 started.
2020-05-02 02:27:54+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-05-02 02:27:54+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.20-1debian10 started.
2020-05-02 02:27:54+00:00 [ERROR] [Entrypoint]: 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
这个意思是我们要在启动的时候指定password,可以去官方找一下启动mysql的正确姿势,我这里直接贴一下我的启动命令:
docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
当然也可以指定一下编码:
docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
执行完上述命令,再用ps查看,终于启动起来了,可喜可贺
[root@Centos6x64 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6bf2579d086 mysql "docker-entrypoint.s 6 seconds ago Up 5 seconds 33060/tcp, 0.0.0.0:3306->3306/tcp mysql01
启动成功之后,就可以用你的mysql客户端根据你自己设置的端口和密码连接这个mysql了,不过别忘了防火墙哦~~
其他一些命令,大概没什么坑,我就贴一下,你懂就好:
- docker stop +(名字或id都可以即 mysql01或者b6bf2579d086)停止运行中的容器
- 启动容器 docker start 容器id(b6bf2579d086)run一次之后,后面就用start启动我们之前创建过的容器
- 删除容器 docker rm id(注意和docker rmi区分)
- 启动一个做了端口映射的tomcat
docker run -d -p 8888:8080 tomcat
-d表示后台运行 -p将主机端口映射到容器的一个端口 - 可以启动多个tomcat,改一下端口映射即可,即不能同一个端口对应多个tomcat端口
希望我上面踩的坑对你有所帮助~~