Docker总结

1. Docker介绍

      1.1 Docker出现的背景

        由于在实际开发中会有很多不同的环境:1.开发环境  2.测试环境  3.生产环境 。不同的环境会带来很多意料之外的问题,由此Docker应运而生。

       1.2 什么是Docker?

        Docker 是一个开源的应用容器引擎,使应用程序可以在不同的环境中运行,而不需要修改代码。

        Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,实现了“Build,Ship and Run Any App,Anywhere”的目标。

        1.3虚拟机和容器

        虚拟机:在一种操作系统里面运行另一种操作系统。例:windows系统里运行linux系统。

虚拟机缺点:启动慢,占用资源多。

        linux容器:由于虚拟机存在的缺点,而出现的另一种linux容器虚拟化技术,容器不是模拟一个完整的操作系统,只需要软件所需的库资源和设置。

        Docker 将应用运行在容器上面,所以可以把Docker看做是mini版的Linux。

                                   

        1.4 Docker 核心概念

概念 

说明

docker镜像软件打包好的用于创建docker容器的模板(类)
dacker容器运行中的镜像称之为容器(对象)
docker仓库用来保存各种打包好的软件镜像

2.Docker环境安装

        2.1 安装Docker

        1、查看内核版本,docker要求linux内核3.8以上

                [root@localhost ~]# uname -a

        2、把yum包更新到最新

                [root@localhost ~]# yum update #可省略

        3、安装需要的软件包, yum-util 提供yum-config-manager功能

                [root@localhost ~]# yum install -y yum-utils

        4、设置镜像仓库

                [root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

        5、安装docker

                [root@localhost ~]# yum -y install docker-ce

2.2.启动和关闭

        启动:

                [root@localhost ~]# systemctl start docker #启动

        查看状态:

                [root@localhost ~]# systemctl status docker #状态

        停止:

                [root@localhost ~]# systemctl stop docker #关闭

        重启:

                [root@localhost ~]# systemctl restart docker #重启docker

        设置docker开机自启动:

                [root@localhost ~]# systemctl enable docker

2.3.配置阿里云镜像加速

        1.登录阿里云(http://dev.aliyun.com

        2.在控制台搜索容器镜像服务

        3.找到镜像加速器

        4、配置镜像加速

                [root@localhost ~]# sudo mkdir -p /etc/docker
                        sudo tee /etc/docker/daemon.json <<-'EOF'
                        {
                          "registry-mirrors": ["https://crhn72f8.mirror.aliyuncs.com"]
                        }
                        EOF
                [root@localhost ~]# sudo systemctl daemon-reload
                [root@localhost ~]# sudo systemctl restart docker

        5.测试

                        [root@localhost ~]# docker info
                        ... ...
                         Registry Mirrors:
                         https://crhn72f8.mirror.aliyuncs.com/

3.Docker常用命令

   3.1.镜像命令

        3.1.1检索

          语法:

docker search IMAGE

           案例:

[root@localhost ~]# docker search tomcat

NAME                DESCRIPTION                     STARS        OFFICIAL    
tomcat              Apache Tomcat is an ...         2823         [OK]       
tomee               Apache TomEE is an ...          82           [OK]      
dordoka/tomcat      Ubuntu 14.04, Tomcat 8 ba...    55                        
bitnami/tomcat      Bitnami Tomcat Docker Image...  35       

     

        3.1.2.拉取

        从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本。

        语法:

docker pull IMAGE:TAG

        案例:

[root@localhost ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
647acf3d48c2: Pull complete 
b02967ef0034: Pull complete 
e1ad2231829e: Pull complete 
5576ce26bf1d: Pull complete 
26518d6c686a: Pull complete 
cdb1f4e0dbfd: Pull complete 
1d872b5136cc: Pull complete 
0b9db4d94c97: Pull complete 
03ee64d25ffd: Pull complete 
45a601314df9: Pull complete 
Digest: sha256:93ff3bc7fb766a9bb5bb0d1f925f9d8795594d87e8365164908ddddcdaa75ff4
Status: Downloaded newer image for tomcat:latest

[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Image is up to date for centos:latest
docker.io/library/centos:latest

        

3.1.3.列表

        列出本地主机上的镜像

        语法:

 docker images

        案例:

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
        tomcat              latest              904a98253fbf        12 days ago         680MB
        redis                  3.0                 c44fa74ead88        4 years ago         91.6MB

3.1.4.删除

        使用 docker rmi 命令删除镜像。

        语法:

docker rmi IMAGE[:tag]

        案例:

[root@localhost ~]# docker rmi tomcat
Error: No such image: tomcat


[root@localhost ~]# docker rmi centos
Untagged: centos:latest
Untagged: centos@sha256:93ff3bc7fb766a9bb5bb0d1f925f9d8795594d87e8365164908ddddcdaa75ff4
Deleted: sha256:904a98253fbf7ce6ff0d5410387256c5fe4eedc5ff2fe130c821b6522558b5bf
Deleted: sha256:206994dfd94922826065d850b959c68deeef9095ca9d5bd557b85f87bf589b51
Deleted: sha256:69f5160bcb0daf65f1fbd50300e84e743854a4444d8f4115882d3e58f7d3a9c6
Deleted: sha256:b329f444a8ff570c3e74e5ba117a46fea81c66cf7edd6702983ac3f5909f9036
Deleted: sha256:2d7550a5b4ce1c6e2e3d20d0128aa172d07f185885e0b1d65e35e6a29dff5f53
Deleted: sha256:64b6542ad739abd61f08e686b94ced8a1f1009b692c2d1a9a488e573bf8f533a
Deleted: sha256:c33ddecc5693370b90d554d2d51e988f2dc9bd1e8b06bc9a402221cd8e4d2bfa
Deleted: sha256:d7f374dbcf316119a8cc9c224fdd46b1fcce379e960fb156090494c2bcbadfd7
Deleted: sha256:553dd3d24238e8d51283a8979144ceaa3115a38055b9e6293bdc68b69bcb2c45
Deleted: sha256:517f7948bc279b5f35c839a4979fc3172ca93c1a0d5821e4c23d59c601d62319
Deleted: sha256:a36ba9e322f719a0c71425bd832fc905cac3f9faedcb123c8f6aba13f7b0731b

3.2.容器命令

        3.2.1.新建并启动容器

        语法:

docker run [options] IMAGE[:TAG]

        OPTIONS说明:有些是一个减号,有些是两个减号

                --name:为容器指定一个名称

                -p:指定端口映射,hostPost:containerPort

                -d:后台模式运行容器

        案例:

[root@localhost ~]# docker run tomcat
... ...
[root@localhost ~]# docker run --name tomcat_1 -p 8081:8080 tomcat
... ...
[root@localhost ~]# docker run --name tomcat_2 -p 8081:8080 -d tomcat
93de8d28eb0dda52bf161be70510b189b6e0babdb430dd0636fddf45a78f1d71
[root@localhost ~]# 

3.2.2 启动容器

        语法:

 docker ps [options]

        OPTIONS说明:

                -a :列出当前所有正在运行的容器+历史上运行过的

[root@localhost ~]# docker ps
[root@localhost ~]# docker ps -a

3.2.3.停止容器

        语法:

docker stop CONTAINER NAME

docker kill CONTAINER NAME #不推荐使用,容易造成容器服务不正常关闭,影响后续使用。
[root@localhost ~]# docker stop tomcat_1
mysql_1 #速度慢
[root@localhost ~]# docker kill tomcat_1
mysql_2 #速度快

3.2.4.启动容器

        语法:

docker start CONTAINER NAME

        案例:

[root@localhost ~]# docker start tomcat_1
tomcat_1

3.2.5.删除容器

        语法:

docker rm CONTAINER NAME

        案例:

[root@localhost ~]# docker rm tomcat_1
tomcat_1

3.2.6  与运行中的容器交互

        语法:

docker exec [options] CONTAINER NAME [command]

        exec说明:

                在运行中的容器中执行命令

                OPTIONS说明:

                -i:以交互模式运行容器,通常与-t 连用

                -t:为容器重新分配一个伪终端,通常与-i 连用

        command说明

                /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,用来解释执行linux指令

        案例:

[root@localhost ~]# docker run -t --name centos_1 centos:7 
[root@9f9e69a704d3 /]# pwd #命令不起作用
[root@localhost ~]# docker run -i --name centos_5 centos:7 #连终端都没有

[root@localhost ~]# docker exec -it tomcat /bin/bash
root@93de8d28eb0d:/usr/local/tomcat# pwd
/usr/local/tomcat
root@93de8d28eb0d:/usr/local/tomcat# ls -l
total 132
-rw-r--r--. 1 root root 18994 Nov  9 22:12 BUILDING.txt
-rw-r--r--. 1 root root  6210 Nov  9 22:12 CONTRIBUTING.md
-rw-r--r--. 1 root root 60269 Nov  9 22:12 LICENSE
-rw-r--r--. 1 root root  2333 Nov  9 22:12 NOTICE
-rw-r--r--. 1 root root  3372 Nov  9 22:12 README.md
-rw-r--r--. 1 root root  6905 Nov  9 22:12 RELEASE-NOTES
-rw-r--r--. 1 root root 16517 Nov  9 22:12 RUNNING.txt
drwxr-xr-x. 2 root root  4096 Nov 18 14:49 bin
drwxr-xr-x. 1 root root    22 Dec  1 07:41 conf
drwxr-xr-x. 2 root root  4096 Nov 18 14:49 lib
drwxrwxrwx. 1 root root    80 Dec  1 07:41 logs
drwxr-xr-x. 2 root root   159 Nov 18 14:49 native-jni-lib
drwxrwxrwx. 2 root root    30 Nov 18 14:49 temp
drwxr-xr-x. 2 root root     6 Nov 18 14:49 webapps #webapps是空目录
drwxr-xr-x. 7 root root    81 Nov  9 22:12 webapps.dist
drwxrwxrwx. 2 root root     6 Nov  9 22:12 work
root@93de8d28eb0d:/usr/local/tomcat# rm -rf webapps #删除webapps
root@93de8d28eb0d:/usr/local/tomcat# mv webapps.dist webapps #重命名webapps.dist
root@5410e26ca6fb:/# exit
exit

3.2.7  查看容器日志

        语法:

docker logs CONTAINER NAME

        案例:

[root@localhost ~]# docker logs tomcat_2

 

4.Docker数据卷

        4.1.数据卷概念

        1.docker容器删除后,在容器中产生的数据还在吗? 比如我在redis的容器里面存储了数据,删除了redis容器之后,数据是否还在?

        2.docker容器和外部机器可以直接交换文件吗? 比如我们可以在windows里面编写代码之后,直接部署tomcat容器里面吗?

        *数据卷概念

        数据卷是宿主机中的一个目录或文件,数据卷设计的目的在于数据的持久化和共享数据,它完全独立于容器的生存周期;作用是容器数据持久化、外部机器和容器之间数据交换;

        语法:创建启动容器时,使用 –v 参数 设置数据卷。如果目录不存在,会自动创建。

docker run –v 宿主机目录:容器内目录

        

4.2.容器与宿主机之间的数据共享

        1.建立一个名为c1的容器,并挂载宿主机目录/root/data_host,对应容器目录/root/data_container

[root@localhost ~]# docker run --name c1 -id -v /root/data_host:/root/data_container centos #启动容器, docker容器运行时必须有一个进程,否则容器立即自杀
b17764ac91316795889b674a70de2029a6b2a902023328accf12160c535bfcd8
[root@localhost ~]# ll
总用量 8
-rw-------. 1 root root 1571 10月 19 16:49 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 12月  1 17:09 data_host #自动创建data_host
-rw-r--r--. 1 root root 1619 10月 20 00:53 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 10月 19 17:03 公共
drwxr-xr-x. 2 root root    6 10月 19 17:03 模板
... ...
[root@localhost ~]# 

        2.在宿主机data_host目录里面创建一个文件,检查容器的data_container目录是否同步

[root@localhost ~]# cd data_host/
[root@localhost data_host]# touch a.txt
[root@localhost data_host]# docker exec -it c1 /bin/bash
[root@33001b1e7251 ~]# ll
total 4
-rw-------. 1 root root 3416 Nov 13  2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root   19 Dec  1 09:13 data_container
[root@33001b1e7251 ~]# cd data_container/ #自动创建data_host
[root@33001b1e7251 data_container]# ll
total 0
-rw-r--r--. 1 root root 0 Dec  1 09:13 a.txt #同步a.txt
[root@33001b1e7251 data_container]# 

        

        4.3.容器与容器之间的数据共享

        1.创建容器c2,挂载data_host数据卷。

[root@localhost ~]# docker run --name c2 -id -v /root/data_host:/root/data_container centos:7 #新建并启动容器

       2. 在c2容器里面创建一个文件,检查c1容器是否同步

[root@localhost data_host]# docker exec -it c2 /bin/bash
[root@952232b7e451 ~]# cd /root/data_container/ 
[root@952232b7e451 data_container]# touch b.txt #创建文件
[root@952232b7e451 data_container]# exit
exit
[root@localhost data_host]# docker exec -it c1 /bin/bash
[root@33001b1e7251 /]# cd /root/data_container/
[root@33001b1e7251 data_container]# ll
total 0
-rw-r--r--. 1 root root 0 Dec  1 09:13 a.txt
-rw-r--r--. 1 root root 0 Dec  1 09:50 b.txt #同步文件
[root@33001b1e7251 data_container]# 

5.docker的应用安装

        docker安装mysql

                问题:容器内的网络服务和外部机器不能直接通信

                解决方案:

        当容器中的网络服务需要被外部的机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上,外部机器访问宿主机上的端口,从而间接访问容器的服务。(这种操作称为容器映射)。

                安装步骤:

1.拉取mysql镜像

docker pull mysql:5.7

2.创建容器

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=1111 \
-d mysql:5.7

        参数说明:

                -e:配置信息,此处配置mysql的root用户的登陆密码

3.操作容器中的mysql

6.Docker File

        6.1.是什么Docker File?

        Docker File是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本。

        从应用软件的角度来看,Docker File、Docker镜像与Docker容器分别代表软件的三个不同阶段,Docker File面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

        6.2.Docker File常用指令

  • FROM:指定构建使用的基础镜像,FROM命令必须写在其他的指令前

  • EXPOSE:声明容器对外暴露的端口号

  • ENV:设置环境变量,可以在容器内获取使用

  • WORKDIR:终端默认的工作目录

  • VOLUME :使容器内的一个目录具有持久化存储的功能

  • RUN:容器构建时需要运行的命令

  • CMD: 指定一个容器启动时要运行的命令,如果指定了多条CMD命令,则只有最后一条会被执行;CMD会被docker run之后的参数替换。

  • ENTRYPOINT:同CMD,但docker run之后的参数会传递给ENTRYPOINT形成新的命令组合。

  • ADD:从src复制文件到容器中的dest,并自动提取压缩格式的文件

  • COPY:类似于ADD,不支持压缩包

  • MAINTAINER:用于为Dockerfile署名

  • ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发。

                

6.3.Docker File 入门

        6.3.1.hub默认centos

        6.3.1.1.测试

[root@localhost ~]# docker run -it centos:7 #运行centos容器
[root@2ec46814342e /]# pwd
/
[root@2ec46814342e /]# vim a.txt
bash: vim: command not found
[root@2ec46814342e /]# ifconfig
bash: ifconfig: command not found

        6.3.1.2问题:

                1.默认工作目录是/

                2.默认不支持vim

                3.默认不支持ifconfig

        

6.3.2.自定义centos

        6.3.2.1.需求
  1. 登陆后的默认路径

  2. vim编辑器

  3. 查看网络配置ifconfig支持

        6.3.2.2.编写Dockerfile

        准备:

[root@localhost ~]# mkdir /usr/local/docker
[root@localhost ~]# cd /usr/local/docker
[root@localhost docker]# vim Dockerfile

         Dockerfile内容:

#继承centos:7
FROM centos:7
MAINTAINER mgw<mgw@126.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH
 
RUN yum -y install vim

6.3.2.3.构建

        语法:

 docker build [OPTIONS] PATH

        OPTIONS说明:

                -f:DockerFile路径

                -t:自定义镜像名称:TAG

        例如:

[root@localhost docker]# docker build -f Dockerfile -t mycentos:1.0 .

        6.3.2.4.测试、
[root@localhost docker]# docker run -it --name mycentos mycentos:1.0
[root@1eaed8189758 local]# vim a.txt
[root@1eaed8189758 local]# pwd
/usr/local
[root@1eaed8189758 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 6  bytes 516 (516.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

        6.3.2.5.压缩镜像

        如果我们要把镜像给别人使用,需要压缩镜像:

[root@localhost docker]# docker save -o mycentos.1.0.rar mycentos:1.0
[root@localhost docker]# ls
Dockerfile  mycentos.1.0.rar  mysql  redis  tomcat

 

        6.3.2.6.解压镜像

        如果被人要用这个镜像,只需要把这个压缩文件解压即可:

[root@localhost docker]# docker rmi mycentos:1.0 
[root@localhost docker]# docker load -i mycentos.1.0.rar 

 

        6.3.2.7.查看镜像历史变更
[root@localhost docker]# docker history mycentos:1.0

6.4.自定义tomcat

        6.4.1上传安装包

                注意:Docker File要跟安装包在同一目录

        6.4.2编写Docker File

FROM         centos:7
MAINTAINER    mgw<mgw@126.com>

#把java与tomcat添加到容器中
ADD jdk-8u191-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.100.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_191
ENV PATH $PATH:$JAVA_HOME/bin
#容器运行时监听的端口
EXPOSE  8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-8.5.100/bin/startup.sh"]
CMD ["/usr/local/apache-tomcat-8.5.100/bin/startup.sh"]

         6.4.3测试

        1.构建并启动

[root@localhost docker]# docker build -f DockerFile -t mytomcat .
[root@localhost docker]# docker run -d -p 8080:8080 --name tomcat \
 -v /usr/docker/tomcat/webapps/test:/usr/local/apache-tomcat-8.5.100/webapps/test \
 -v /usr/docker/tomcat/logs:/usr/local/apache-tomcat-8.5.100/logs \
 mytomcat

        2.访问tomcat

                ​​​​​​​

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值