文章目录
十二、Docker
1.简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中, 然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker支持将软件编译成一个镜像;然后 在镜像中各种软件做好配置,将镜像发布 出去,其他使用者可以直接使用这个镜像。 运行中的这个镜像称为容器,容器启动是 非常快速的。类似windows里面的ghost操 作系统,安装好后什么都有了。
2.Docker核心概念
docker镜像(Images):Docker 镜像是用于创建Docker 容器的 模板。
docker容器(Container):容器是独立运行的一个或一组应用。
docker客户端(Client):客户端通过命令行或者其他工具使用 DockerAPI(https://docs.docker.com/reference/api/docker_remote_api) 与Docker 的守护进程通信
docker主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
docker仓库(Registry):Docker 仓库用来保存镜像,可以理解 为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
3.Docker的安装
直接在root用户 yum install docker即可(centos7)
4.Docker的基操
(1)镜像操作
<1>检索
我们可以在docker hub上检索镜像的详细信息,如镜像的TAG
[centos7@localhost ~]$ sudo docker search mysql
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/mysql MySQL is a widely used, open-source relati... 7960 [OK]
docker.io docker.io/mariadb MariaDB is a community-developed fork of M... 2662 [OK]
docker.io docker.io/mysql/mysql-server Optimized MySQL Server Docker images. Crea... 598 [OK]
docker.io docker.io/zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 176 [OK]
docker.io docker.io/hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 110
docker.io docker.io/zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server ... 92 [OK]
docker.io docker.io/centurylink/mysql Image containing mysql. Optimized to be li... 60 [OK]
docker.io docker.io/1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
docker.io docker.io/centos/mysql-57-centos7 MySQL 5.7 SQL database server 50
docker.io docker.io/mysql/mysql-cluster Experimental MySQL Cluster Docker images. ... 41
docker.io docker.io/tutum/mysql Base docker image to run a MySQL database ... 31
docker.io docker.io/bitnami/mysql Bitnami MySQL Docker Image 25 [OK]
docker.io docker.io/schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic back... 25 [OK]
docker.io docker.io/zabbix/zabbix-web-apache-mysql Zabbix frontend based on Apache web-server... 24 [OK]
docker.io docker.io/linuxserver/mysql A Mysql container, brought to you by Linux... 20
docker.io docker.io/zabbix/zabbix-proxy-mysql Zabbix proxy with MySQL database support 20 [OK]
docker.io docker.io/centos/mysql-56-centos7 MySQL 5.6 SQL database server 13
docker.io docker.io/circleci/mysql MySQL is a widely used, open-source relati... 12
docker.io docker.io/mysql/mysql-router MySQL Router provides transparent routing ... 8
docker.io docker.io/dsteinkopf/backup-all-mysql backup all DBs in a mysql server 6 [OK]
docker.io docker.io/openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 ima... 6
docker.io docker.io/jelastic/mysql An image of the MySQL database server main... 1
docker.io docker.io/ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 0 [OK]
docker.io docker.io/cloudposse/mysql Improved `mysql` service with support for ... 0 [OK]
docker.io docker.io/widdpim/mysql-client Dockerized MySQL Client (5.7) including Cu... 0 [OK]
<2>拉取(下载)
tag是可选的,tag表示标签,多为软件的版本,默认是latest
[centos7@localhost ~]$ sudo docker pull mysql
Using default tag: latest
Trying to pull repository docker.io/library/mysql ...
latest: Pulling from docker.io/library/mysql
27833a3ba0a5: Pull complete
864c283b3c4b: Pull complete
cea281b2278b: Pull complete
8f856c14f5af: Pull complete
9c4f38c23b6f: Pull complete
1b810e1751b3: Pull complete
5479aaef3d30: Pull complete
ded8fa2e1614: Pull complete
636033ba4d2e: Pull complete
902e6010661d: Pull complete
dbe44d2bf055: Pull complete
e906385f419d: Pull complete
Digest: sha256:a7cf659a764732a27963429a87eccc8457e6d4af0ee9d5140a3b56e74986eed7
Status: Downloaded newer image for docker.io/mysql:latest
<3>查看已安装镜像
[centos7@localhost ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql latest 7bb2586065cd 2 days ago 477 MB
<4>删除镜像
将镜像对应的image id删除
docker rmi IMAGE ID
(2)容器操作
软件镜像(QQ 安装程序)----运行镜像----产生一个容器
<1>搜索镜像
[centos7@localhost ~]$ sudo docker search tomcat
<2>拉取镜像
[centos7@localhost ~]$ sudo docker pull tomcat
<3>根据镜像启动容器
[centos7@localhost ~]$ sudo docker run --name mytomcat -d tomcat:latest
2967fa251bcd6b01d4aab31b86a98f0d024dd9a3be61513ac0a94640943d4f40
<4>查看正在运行的docker
[centos7@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2967fa251bcd tomcat:latest "catalina.sh run" 51 seconds ago Up 49 seconds 8080/tcp mytomcat
我们可以看到tomcat的默认端口号是8080,但是访问了localhost:8080无法访问,因为没有建立端口映射,所以无法访问容器的tomcat,所以要重新安装tomcat
<5>停掉容器
[centos7@localhost ~]$ sudo docker stop 2967fa251bcd
2967fa251bcd
<6>删除容器
[centos7@localhost ~]$ sudo docker rm 2967fa251bcd
2967fa251bcd
<7>启动一个做了端口映射的容器
[centos7@localhost ~]$ sudo docker run -d -p 8888:8080 tomcat
041f7f88220a98095cb0fa6edb17d7518609a2358e7c1b70cc6a998ca3f730a1
-d:后台运行
-p:将主机端口映射过来
8888:主机端口
8080:容器端口
<8>查看日志
[centos7@localhost ~]$ sudo docker logs 041f7f88220a