linux运维、架构之路-Docker快速入门

一、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 -r
3.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.repo
sed -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.service
systemctl enable docker.service
#查看docker进程是否正常#
[root@docker01 ~]# ps -ef|grep docker
root       4376      1  0 14:16 ?        00:01:22 /usr/bin/dockerd
root       4380   4376  0 14:16 ?        00:00:14 docker-containerd --config /var/run/docker/containerd/containerd.toml
root       5745   5696  0 18:28 pts/0    00:00:00 grep --color=auto docker

5、查看docker版本

[root@docker01 ~]# docker version
Client:
 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: swarm

Server:
 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 centos
docker pull docker
docker pull tomcat
docker pull java

2、查看当前镜像

[root@docker01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker              latest              40c6c282d58f        11 hours ago        133MB
tomcat              latest              df50c9d355cf        6 days ago          463MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
java                latest              d23bdf5b1b1b        17 months ago       643MB

①导出镜像

docker save -o [镜像名称] [镜像]

[root@docker01 ~]# docker save -o centos.tar centos
[root@docker01 ~]# ls
anaconda-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 tomcat
NAME                                  DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat                                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 -version
openjdk 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 ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
511474a7d51c        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 redis
redis
链接下引用的容器内的主进程redis将收到 SIGKILL,然后该容器将被删除。
删除所有停止的容器
$ docker rm $(docker ps -a -q)
该命令将删除所有停止的容器。该命令 docker ps -a -q将返回所有现有的容器ID并将它们传递给rm将删除它们的命令。任何正在运行的容器都不会被删除。
取出容器及其容量
$ docker rm -v redis
redis
该命令将删除容器及与其相关的任何卷。请注意,如果卷是使用名称指定的,则不会被删除。
取出容器并选择性地移除卷
$ docker create -v awesome:/foo -v /bar --name hello redis
hello
$ docker rm -v hello
在本例中,音量/foo将保持不变,但音量 /bar将被删除。同样的行为适用于继承的卷 --volumes-from

  

成功最有效的方法就是向有经验的人学习!
原文地址:https://www.cnblogs.com/yanxinjiang/p/9260024.html