1. Docker快速入门(仓库,镜像,容器)

参考阿里云文档:https://help.aliyun.com/document_detail/51853.html?spm=a2c4g.11186623.6.820.RaToNY

参考菜鸟教程文档:https://m.runoob.com/docker/centos-docker-install.html

Docker的目标之一就是缩短代码从开发测试到部署、上线运行的周期通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该盒子拿走,而需要该盒子中一件件的取。它的优点就在于:1.实现虚拟化,更好的资源隔离和共享。2.一次编写,四处运行

容器与虚拟机比较

Docker安装与基本命令

  安装:yum install docker

安装yml
yum install -y yum-utils device-mapper-persistent-data lvm2

设置阿里云镜像
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看可安装的版本有哪些
yum list docker-ce --showduplicates | sort -r

安装docker
yum -y install docker-ce-20.10.10-3.el7

docker -v
默认安装v1.13.1,有坑的

  查看版本:docker -v

  启动:systemctl start docker

  停止:systemctl stop docker

  重启:systemctl restart docker

  查看状态:systemctl status docker

  开机启动:systemctl enable docker

  查看docker概要信息:docker info

  查看docker帮助文档:docker –help

卸载docker

1. 停止所有容器

2. 卸载     
    sudo yum remove docker* 删除镜像 
    rm -rf /var/lib/docker 
4. 搜索依赖,什么都没有就卸载干净了
    rpm -qa | grep docker
5. 删除依赖 
    rpm -e xxxxx --nodeps 

Docker镜像操作

  3.1 搜索镜像:docker search 镜像名称     例如:docker search centos   docker search mysql     docker search  tomcat

  3.2 下载镜像:docker pull 镜像名称         因为docker镜像仓库在国外下载起来巨慢,所以我们需要使用国内的镜像地址。

// 1. 编辑该文件,如果没有就先创建
vim /etc/docker/daemon.json
// 2. 加入下面配置

{
"debug":true,"experimental":true,
"registry-mirrors":["https://pb5bklzr.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"]
}

// 3. 重启docker

  下载zookeeper:       docker pull zookeeper

  3.3 查看本地所有镜像:docker images

  

    * REPOSITORY:镜像所在的仓库名称

  * TAG:镜像标签

  * IMAGE ID:镜像ID

  * CREATED:镜像的创建日期(不是获取该镜像的日期)

  * SIZE:镜像大小

  * 这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

  3.4 删除  删除指定镜像:  docker rmi -f 镜像id       删除所有镜像: docker rmi -f `docker images -q`

Docker容器操作

镜像: 镜像是文件, 是只读的, 提供了运行程序完整的数据, 是应用程序的"集装箱"
容器: 镜像的运行环境, 迷你的"linux操作系统", 由Docker负责创建, 容器之间彼此隔离

创建容器常用的参数说明:

       4.1创建容器命令:docker run

   -i:表示运行容器       -t:表示容器启动后会进入其命令行      加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

       --name :为创建的容器命名               

   -v:表示目录映射关系(数据需要持久化的最好都映射下,容器被删掉之后下次新建的映射目录相同的话,数据可以直接使用;比如mysql。) 前者是宿主机目录,后者是映射到容器上的目录, 可以使用多个-v做多个目录或文件映射。容器目录只能使用绝对路径

 

    (绝对路径)访问时会404,tomcat默认目录下 /usr/local/tomcat/webapps/ROOT 会有很多文件,包括首页文件。宿主机空映射过去直接把容器文件置空了。
    docker run -di --name=tomcat -p 8080:8080 -v /root/tomcathtml:/usr/local/tomcat/webapps/ROOT tomcat:7-jre8
    (相对路径)正常访问,会把默认目录 /usr/local/tomcat/webapps/ROOT 下的所有文件 全部映射到宿主机上。我们保存好 tomcathtml 就相当于备份了。
    docker run -di --name=tomcat -p 8080:8080 -v tomcathtml:/usr/local/tomcat/webapps/ROOT tomcat:7-jre8

 

       -d:在run后面加上-d参数这样创建容器后不会自动登录容器       

   -p:表示端口映射;前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

  -e:配置全局环境变量

  4.2查看容器命令:

  查看正在运行的容器: docker ps
  查看历史运行过的容器 : docker ps -a
  查看最后一次运行的容器:docker ps -l
  查看停止的容器: docker ps -f status=exited
  进入运行的容器中: docker exec -it 容器id/容器名称 /bin/bash

  查看容器ip(只能查看运行中的容器) docker inspect 容器名
  启动容器: docker start 容器名称
  关闭容器: docker stop 容器名称
  删除停止的容器:docker rm 容器名称
  查看容器日志 docker logs -f 镜像id

启动容器直接失败的话,可以docker ps -a 找到容器id,然后看失败日志
[root@node2 pay_demo_docker]# docker inspect --format '{{.LogPath}}' 容器id /var/lib/docker/containers/ab90136f169b50267cb4dd6be80c462eb325ea274f5e4de5cdeb394b5bc0d66d/ab90136f169b50267cb4dd6be80c462eb325ea274f5e4de5cdeb394b5bc0d66d-json.log [root@node2 pay_demo_docker]# cat 上面的url

  4.3创建容器的两种方式:

// 查看所有镜像
[root@VM_0_3_centos /]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos      latest              75835a67d134        3 days ago          200 MB
docker.io/nginx       latest              be1f31be9a87        10 days ago         109 MB
docker.io/redis       latest              0a153379a539        10 days ago         83.4 MB
docker.io/solr        latest              45749c8baa2a        2 weeks ago         834 MB
docker.io/zookeeper   latest              89f7884dcc4e        3 weeks ago         148 MB
docker.io/tomcat      latest              41a54fe1f79d        4 weeks ago         463 MB
docker.io/mysql       latest              6a834f03bd02        5 weeks ago         484 MB
[root@VM_0_3_centos /]#
/**
 * 创建一个交互式容器(创建完成直接启动并进入容器,exit退出会自动关闭)
 *     容器名称不能重复   
 *     命名为mycentos,来源于centos镜像,版本为latest     /bin/bash是命令解析器(加了就能直接进入容器命令行)
 */
[root@VM_0_3_centos /]# docker run -it --name=mycentos centos:latest /bin/bash
[root@750f40204378 /]# // 看左边的状态,会发现现在已经进入了容器了,而不是虚拟机了。
[root@750f40204378 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@750f40204378 ~]#// 退出
[root@750f40204378 ~]# exit
[root@VM_0_3_centos /]# // 这时候docker ps 发现容器已经停止了。
/**
 * 创建一个守护式容器(创建完成启动容器但不会进入容器,exit退出容器也不会关闭)
 *     因为不需要进入容器, 所以不需要加 /bin/bas 是命令解析器。
 */
[root@VM_0_3_centos ~]# docker run -id --name=mycentos2 centos:latest
35d806b3669df020a3027445047b98262521c7b4c0bcb246b1af8cd904e2296e
[root@VM_0_3_centos ~]#
[root@VM_0_3_centos ~]# docker ps -a  // 查看历史状态发现mycentos已经停止, mycentos2还在运行。
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
35d806b3669d        centos:latest       "/bin/bash"         27 minutes ago      Up 27 minutes                                    mycentos2
750f40204378        centos:latest       "/bin/bash"         About an hour ago   Exited (137) 5 seconds ago                       mycentos

文件拷贝与目录挂载

/**
 * 将宿主机文件复制到容器中:
 *    docker cp  目标目录  容器名: 指定目录
 */ 
[root@VM_0_3_centos ~]# docker cp /usr/local/wulei/myfile mycentos:/usr/local
[root@VM_0_3_centos ~]# docker exec -it mycentos /bin/bash
[root@750f40204378 /]# cd /usr/local
[root@750f40204378 local]# ll
total 44
drwxr-xr-x 2 root root 4096 Apr 11  2018 bin
drwxr-xr-x 2 root root 4096 Apr 11  2018 etc
drwxr-xr-x 2 root root 4096 Apr 11  2018 games
drwxr-xr-x 2 root root 4096 Apr 11  2018 include
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib
drwxr-xr-x 2 root root 4096 Apr 11  2018 lib64
drwxr-xr-x 2 root root 4096 Apr 11  2018 libexec
-rw-r--r-- 1 root root    4 Oct 14 03:35 myfile
drwxr-xr-x 2 root root 4096 Apr 11  2018 sbin
drwxr-xr-x 5 root root 4096 Oct  6 19:14 share
drwxr-xr-x 2 root root 4096 Apr 11  2018 src
/**
 * 把容器文件copy到宿主机中
 * docker cp 容器名称:容器目录 需要拷贝的文件或目录
 */
 /**
  * 目录挂载(文件映射)
  * 将宿主机的indexhtml文件映射到指定目录,并命名为haha
  */
docker run -id --name=mycentos1 -v /usr/local/wulei/indexhtml:/usr/local/haha  centos:latest
 /**
  * 目录挂载(文件夹映射  需要通过--privileged=true加持权限)
  * 将宿主机的wulei文件夹映射到指定目录,并命名为ok
  */
docker run -id --name=mycentos2 -v /usr/local/wulei:/usr/local/ok --privileged=true centos:latest

link单向连接

  docker内部的容器想要互相访问,我们可以通过ip:prot的方式,但是我们在进行容器迁移的时候ip可能会变,这个时候用ip就不太方便了,我们可以通过指定容器的名称做单向连接。这样不管ip怎么变都不会影响我们了。

通过 --link 指定容器名称,来设置单向连接

Bridge网桥双向通信

Bridge网桥其实就是容器的一个虚拟网卡。通过bridge可以在容器内部ping百度,也可以容器内部互相ping。

Bridge网桥其实就是容器的一个虚拟网卡。通过bridge可以在容器内部ping百度,也可以容器内部互相ping

 docker inspect {id} 查看容器信息,会发现它绑定了两个网桥,即使两个网桥里面的ip都是一样的也不影响什么(我这里恰好不一样)。

    ............
    ............
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "869f4bcea6500d8d00843da0b2600e0aca1aed74289be4514629a049f74711ee",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "3306/tcp": null,
                "3307/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3306"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "3306"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/869f4bcea650",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "3a83603a07eb4c9259434f58064600a4130c8dfd573cd0aa601363361399ec04",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.3",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:03",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "ee5a0b140707d6a32589e04bcef7a60a0c7fa9ecfd80c3712d6468a7d12f0de4",
                    "EndpointID": "3a83603a07eb4c9259434f58064600a4130c8dfd573cd0aa601363361399ec04",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                },
                "my_bridge": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [
                        "f7a4e17ddd46"
                    ],
                    "NetworkID": "60cc0a27cbf4af18a117846eed9ce54bd22c0adf196558547f40a40a942ba34d",
                    "EndpointID": "50d4d5afd50a5fe1ecadceeb60bf8672083edbd87dc31bba2d0a0a7e1319f498",
                    "Gateway": "172.19.0.1",
                    "IPAddress": "172.19.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:13:00:03",
                    "DriverOpts": {}
                }
            }
        }
    }
]
View Code

 

 。

 

posted @ 2018-10-13 15:34  吴磊的  阅读(649)  评论(0编辑  收藏  举报
//生成目录索引列表