一、Docker介绍
Docker是Docker.lnc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。
Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。二、Docker是什么?
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。三、Docker 的用途
1、提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
2、提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。3、组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构四、Docker改变了什么?
面向产品:产品交付
面向开发:简化环境配置 面向测试:多版本测试 面向运维:环境一致 面向架构:自动化扩容(微服务)五、Docker安装
1、环境
[root@docker01 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@docker01 ~]# uname -r3.10.0-327.el7.x86_64[root@docker01 ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead)[root@docker01 ~]# getenforce Disabled
2、添加yum源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.reposed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
3、安装docker
Docker官网:http://www.docker.com/
yum install docker-ce -y
4、启动docker并设置成开机启动
systemctl start docker.servicesystemctl enable docker.service#查看docker进程是否正常#[root@docker01 ~]# ps -ef|grep dockerroot 4376 1 0 14:16 ? 00:01:22 /usr/bin/dockerdroot 4380 4376 0 14:16 ? 00:00:14 docker-containerd --config /var/run/docker/containerd/containerd.tomlroot 5745 5696 0 18:28 pts/0 00:00:00 grep --color=auto docker
5、查看docker版本
[root@docker01 ~]# docker versionClient: Version: 18.03.1-ce API version: 1.37 Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:20:16 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarmServer: Engine: Version: 18.03.1-ce #docker1.8版本只能安装在CentOS7 API version: 1.37 (minimum version 1.12) Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:23:58 2018 OS/Arch: linux/amd64 Experimental: false
如果做监控的话,可以使用 docker info
六、Docker基础命令
1、拉取镜像
docker pull centosdocker pull dockerdocker pull tomcatdocker pull java
2、查看当前镜像
[root@docker01 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker latest 40c6c282d58f 11 hours ago 133MBtomcat latest df50c9d355cf 6 days ago 463MBcentos latest 49f7960eb7e4 4 weeks ago 200MBjava latest d23bdf5b1b1b 17 months ago 643MB
①导出镜像
docker save -o [镜像名称] [镜像][root@docker01 ~]# docker save -o centos.tar centos[root@docker01 ~]# lsanaconda-ks.cfg centos.tar需要将docker导出为tar,后面为镜像名称
②导入镜像
[root@docker01 ~]#docker load --input centos.tar #使用input导入[root@docker01 ~]# docker load < nginx.tar #使用重定向导入
③删除镜像
docker镜像删除可以使用docker rmi 后面加上docker的ID
3、搜索镜像
[root@docker01 ~]# docker search tomcatNAME DESCRIPTION STARS OFFICIAL AUTOMATEDtomcat Apache Tomcat is an open source implementati… 1909 [OK] tomee Apache TomEE is an all-Apache Java EE certif… 51 [OK] dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 49 [OK]davidcaste/alpine-tomcat Apache Tomcat 7/8 using Oracle Java 7/8 with… 26 [OK]bitnami/tomcat Bitnami Tomcat Docker Image 17 [OK]consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 16 [OK]cloudesire/tomcat Tomcat server, 6/7/8 15 [OK]tutum/tomcat Base docker image to run a Tomcat applicatio… 10 meirwa/spring-boot-tomcat-mysql-app a sample spring-boot app using tomcat and My… 9 [OK]jeanblanchard/tomcat Minimal Docker image with Apache Tomcat 8 aallam/tomcat-mysql Debian, Oracle JDK, Tomcat & MySQL 7 [OK]rightctrl/tomcat CentOS , Oracle Java, tomcat application ssl… 3 [OK]amd64/tomcat Apache Tomcat is an open source implementati… 2 maluuba/tomcat7-java8 Tomcat7 with java8. 2 fabric8/tomcat-8 Fabric8 Tomcat 8 Image 2 [OK]camptocamp/tomcat-logback Docker image for tomcat with logback integra… 1 [OK]99taxis/tomcat7 Tomcat7 1 [OK]primetoninc/tomcat Apache tomcat 8.5, 8.0, 7.0 1 [OK]swisstopo/service-print-tomcat backend tomcat for service-print "the true, … 0 jelastic/tomcat 0 oobsri/tomcat8 Testing CI Jobs with different names. 0 trollin/tomcat 0 s390x/tomcat Apache Tomcat is an open source implementati… 0 picoded/tomcat7 tomcat7 with jre8 and MANAGER_USER / MANAGER… 0 [OK]awscory/tomcat tomcat 0
参数:
--automated #只列出automated build类型的镜像--no-trunc #显示完整的镜像描述-s #列出收藏数不小于指定值的镜像
4、启动一个容器并进入到容器查看系统版本
[root@docker01 ~]# docker run -i -t centos /bin/bash[root@eccc3e4c6f27 /]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)
[root@docker01 ~]# docker run -it java java -versionopenjdk version "1.8.0_111"OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2~bpo8+1-b14)OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode)
5、Docker exec
Docker exec 是docker 官方提供的技术docker exec [OPTIONS] CONTAINER COMMAND [ARG...]-d 在后台执行命令-e 设置环境变量-i 即使没有连接,也要保持STDIN打开--privileged 给命令赋予扩展权限-t 分配一个TTY-u 设置用户名
6、Docker Create
#以前我们docker 都是用run,新的版本可以使用creare。create #仅仅生成一个容器,但是不启动它docker create #创建容器--name #容器名称-e #代表环境变量,docker的配置文件大部分写在环境变量中-p #端口映射,映射容器中的3307到物理机的3307端口docker start Name #启动容器docker stop Name #停止容器
7、Docker ps
[root@docker01 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES511474a7d51c centos "/bin/bash" 5 seconds ago Up 3 seconds suspicious_vaughan
8、Docker rm
删除一个或多个容器docker rm [OPTIONS] CONTAINER [CONTAINER...]-f [--force] #强制删除正在运行的容器-l [--link] #删除指定的连接-v [--volumes] #删除与容器关联的卷例子取出一个容器这将删除链接中引用的容器 /redis。$ docker rm /redis/redis删除--link在默认网桥上指定的链接这将删除 默认网桥网络/webapp与/redis容器之间的基础链接,从而移除两个容器之间的所有网络通信。这--link与用户指定的网络一起使用时不适用。$ docker rm --link /webapp/redis/webapp/redis强制删除正在运行的容器该命令将强制删除正在运行的容器。$ docker rm --force redisredis链接下引用的容器内的主进程redis将收到 SIGKILL,然后该容器将被删除。删除所有停止的容器$ docker rm $(docker ps -a -q)该命令将删除所有停止的容器。该命令 docker ps -a -q将返回所有现有的容器ID并将它们传递给rm将删除它们的命令。任何正在运行的容器都不会被删除。取出容器及其容量$ docker rm -v redisredis该命令将删除容器及与其相关的任何卷。请注意,如果卷是使用名称指定的,则不会被删除。取出容器并选择性地移除卷$ docker create -v awesome:/foo -v /bar --name hello redishello$ docker rm -v hello在本例中,音量/foo将保持不变,但音量 /bar将被删除。同样的行为适用于继承的卷 --volumes-from