文档章节

Docker 安装

雁南飞丶
 雁南飞丶
发布于 03/07 11:30
字数 2013
阅读 16
收藏 0

基本主流的操作系统都可以安装

1、当前操作系统是CentOS7

[root@node1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

2、安装

1、安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2、安装docker官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3、安装docker
yum install docker-ce -y
4、启动docker
systemctl start docker
systemctl enable docker

3、配置docker加速器

我用的阿里云的
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://wcrsjm1z.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4、docker 官方https://docs.docker-cn.com/

5、docker容器

1、创建一个Nginx容器,并放入后台运行
docker container run -d nginx
2、列出当前正在运行的容器
[root@node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4d48339707be        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes        80/tcp              silly_jones         gifted_hermann
3、指定容器名称、主机名和设置环境变量
docker container run -d --name nginx01 -e TEST=abc -h nginx01 nginx
[root@node1 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
cf23ee4c8dbe        nginx               "nginx -g 'daemon of…"   7 seconds ago       Up 5 seconds        80/tcp              nginx01
4d48339707be        nginx               "nginx -g 'daemon of…"   5 minutes ago       Up 5 minutes        80/tcp              silly_jones
4、进入容器查看变量是否生效
[root@node1 ~]# docker exec -it nginx01 /bin/bash
root@nginx01:/# echo $TEST
abc
root@nginx01:/# hostname 
nginx01
5、从宿主机暴露一个端口到容器
[root@node1 ~]# docker container run -d --name nginx02 -p 88:80 nginx 
62bef4ea6dde2b2475c7b22347bcc7697ecadfe31dfacb6b06760638b9553296
[root@node1 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
62bef4ea6dde        nginx               "nginx -g 'daemon of…"   4 seconds ago       Up 2 seconds        0.0.0.0:88->80/tcp   nginx02
cf23ee4c8dbe        nginx               "nginx -g 'daemon of…"   2 minutes ago       Up 2 minutes        80/tcp               nginx01
4d48339707be        nginx               "nginx -g 'daemon of…"   8 minutes ago       Up 8 minutes        80/tcp               silly_jones
PORTS字段,代表宿主机监听0.0.0.0的88端口,转发到该容器80端口
打开浏览器输入:http://宿主机IP:88

6、docker容器资源限制

容器是密集型的,启动大量的容器,如果不对容器进行资源限制,难免会因为某个容器占用大量资源,导致宿主机资源耗尽。我们看看如何限制容器对内存、CPU资源使用。资源限制常用选项如下表:

1、限制容器内存使用
[root@node1 ~]# docker container run -d --name nginx03 --memory="500m" --memory-swap="600m" --oom-kill-disable nginx
c3be0826170a7b6a873ea77efdb75c471a9cae938c92642ada0912d8e42a09fa
上述设置允许容器最多使用500M内存和600M的SWAP,并禁用OOM Killer。
使用 docker stats 查看当前容器内存限制及使用:
[root@node1 ~]# docker stats --no-stream nginx03
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
c3be0826170a        nginx03             0.00%               1.367MiB / 500MiB   0.27%               648B / 0B           0B / 0B             2
2、容器限制CPU
允许容器最多可以使用一个半的CPU
[root@node1 ~]# docker container run -d --name nginx04 --cpus="1.5" nginx
03a9ffb3feedf9794815976d231085d7b1c2ed73d4421ed5ca47f102a8995dcc
允许容器最多使用50%的CPU
[root@node1 ~]# docker run -d --name nginx05 --cpus=".5" nginx
e0c47198121c2d201ed79daf32d2f854aaaaccc08e585eb122c293007b1bb718
建议:设置-memory再禁用OOM Killer,CPU使用不超过50%。

7、管理容器应用数据

容器删除,容器里产生的数据也会删除,并且在容器里操作是在可写层,会经过存储驱动管理,这种额外的抽象会降低性能。
容器的可写层存储数据,有一些缺点:
当容器停止运行时,数据将不会持续存在,如果另一个进程需要这些数据,则很难将数据从容器中取出。并且容器删除后,数据也会随着删除。
容器的可写层与容器运行的宿主机紧密耦合,无法轻松地将数据移动到其他地方。
容器的可写层需要存储驱动程序来管理文件系统。存储驱动程序使用Linux内核提供的联合文件系统,与直接在宿主机上写入文件相比,这种额外的抽象会降低性能。
Docker提供三种方式将数据从宿主机挂载到容器中:
volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。
1. volumes:
多个运行容器之间共享数据。
当容器停止或被移除时,该卷依然存在。
多个容器可以同时挂载相同的卷。
当明确删除卷时,卷才会被删除。
    管理卷:
[root@node1 ~]# docker volume create nginx-vol
nginx-vol
[root@node1 ~]# docker volume ls
DRIVER              VOLUME NAME
local               nginx-vol
[root@node1 ~]# docker volume inspect nginx-vol
[
    {
        "CreatedAt": "2019-03-07T10:54:28+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
        "Name": "nginx-vol",
        "Options": {},
        "Scope": "local"
    }
]
2、运行容器使用上面的卷
[root@node1 ~]# docker container run -d --name=nginx-vol --mount source=nginx-vol,destination=/usr/share/nginx/html nginx 或者docker container run -d --name=nginx-vol -v nginx-vol:/usr/share/nginx/html nginx 
8cfab23c54c99b80058b4697898269fbc8b1b9f2db768751d2ea867a076bba34
[root@node1 ~]# ls /var/lib/docker/volumes/nginx-vol/_data/
50x.html  index.html
可以看到容器中的数据已经存储到了nginx-vol数据卷中。  
注:-v选项在早期Docker版本已经支持,而--mount是在17 CE版本后才引入的选项,初学者建议使用--mount。 
3、清理
docker container stop nginx-vol
docker container rm nginx-vol
docker volume rm nginx-vol
4、也可以使用NFS外部存储,例如:
 docker volume create --driver local \
>     --opt type=nfs \
>     --opt o=addr=192.168.43.199,rw \
>     --opt device=:/opt/container_data \
>     nginx-vol

    bind mounts
特点:
从主机共享配置文件到容器。
在Docker主机上的开发环境和容器之间共享代码。
当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时。
1、运行一个容器挂载宿主机目录:
[root@node1 ~]# docker container run -d --name=nginx-bind --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /app/wwwroot.
See 'docker run --help'.
[root@node1 ~]# mkdir -pv /app/wwwroot
mkdir: 已创建目录 "/app"
mkdir: 已创建目录 "/app/wwwroot"
[root@node1 ~]# docker container run -d --name=nginx-bind --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
8a7632921970cb5aff5028e1985d7cf42a53cc7a9702f4fb7428171304ef457d
或者
docker container run -d --name=nginx-bind -v /app/wwwroot:/usr/share/nginx/html nginx
验证绑定:
[root@node1 ~]# docker inspect nginx-bind
...
            "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/app/wwwroot",
                    "Target": "/usr/share/nginx/html"
                }
            ],
...
清理
docker container stop nginx-bind
docker container rm nginx-bind

docker 容器资源监控

监控
docker stats `docker ps --format={{.Names}}`
docker stats --no-stream grafana
 docker container stats --no-stream nginx02
查看容器地址
docker container inspect -f '{{.NetworkSettings.IPAddress}}' nginx01
查看容器日志
docker logs -f --tail 200 esn1

docker 网络模式

    bridge --net=bridge
默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
    host --net=host
容器不会获得一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主机的。容器除了网络,其他都是隔离的。
    none --net=none
获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置。
    container --net=container:Name/ID
与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。
    自定义网络 
与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名或者主机名容器之间网络通信。

[root@node1 ~]# docker network create kang
2e92d456ceee41008021371585b70ce6dad314d5d048ad728087843571b4b015
[root@node1 ~]#  docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
9547aa0bcfc3        bridge              bridge              local
4b7fbe3e18eb        host                host                local
2e92d456ceee        kang                bridge              local
7c0ab2e19fcd        none                null                local
[root@node1 ~]# docker container run -itd --name=k1 --net=kang busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
697743189b6d: Pull complete 
Digest: sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f
Status: Downloaded newer image for busybox:latest
31e497f6a2c461158249d2ea269de8dc62983fbfafa7643c97cc6142dd678660
[root@node1 ~]# docker container run -itd --name=k2 --net=kang busybox
cdabab1846e7747b39a02c9ef5a8b7298ae26e4cfbc2c8db61b6818192e73225
[root@node1 ~]# docker exec -it k2 /bin/sh
/ # ping k1
PING k1 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.351 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.191 ms

--- k1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.191/0.271/0.351 ms
创建的两个容器都加入了kang网络,并且可以通过主机名通信。
[root@node1 ~]# docker network inspect kang

docker 更多操作查阅官方文档

© 著作权归作者所有

雁南飞丶
粉丝 37
博文 176
码字总数 228466
作品 0
西安
运维
私信 提问
docker 17 CE EE install

先决条件 Docker EE 要安装Docker Enterprise Edition(Docker EE),您需要知道与您的试用或订阅相关联的Docker EE存储库URL。要获取此信息: 转到https://store.docker.com/?overlay=subsc...

乌龟运维
2017/06/12
0
0
centos7 docker 安装

转载自https://www.cnblogs.com/baolong/p/6526591.html 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方已经将...

xiaoyaoyoufang
2018/02/26
0
0
『中级篇』在centos上安装docker(九)

在mac和window上都已经安装了docker,这次咱们在linux系统下安装docker。这次也补充下vagrant如何搜索:Vagrantfile 如何搜Vagrantfile 之前的课程已经已经完成了在windows/mac下通过vagrant...

IT人故事会
2018/06/03
0
0
Windows平台上Docker安装与使用

1.在windows平台上安装docker Windows平台上的docker的安装包含docker在Windows平台上运行的所有的依赖包,这里最主要介绍安装前需要考虑的因素和在Windows平台上怎么样下载和安装docker。如...

jiang_xinxing
2017/06/01
0
0
『中级篇』如何在mac上安装docker(五)

人与动物最大的区别就是,人会使用工具。在二线城市可能不太明显,一线开发和运维一般都是使用的电脑都是mac,因为mac更接近服务器的linux操作系统。 mac安装的官网介绍 docker官网mac安装 ...

IT人故事会
2018/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

idea下springboot 项目在static目录下添加文件不生效

idea下springboot 项目在static目录下添加文件不生效 问题描述 是这样子的,我的项目目录结构如下: 我在static目录下,创建了index.html和aaaa.jpg这两个文件。然后,启动服务访问 http://l...

wotrd
昨天
5
0
k8s1.14 一、环境

1. 4台虚拟机 (CentOS Linux release 7.2.1511 (Core) ) 192.168.130.211 master 192.168.130.212 node1 192.168.130.213 node2 192.168.130.214 node3 2. 设置服务器hostname 2.1 设置本机......

ThomasCheng
昨天
4
0
盖茨:如果我现在开创一家公司 将会专注于AI

新浪科技讯,北京时间 6 月 26 日凌晨消息,微软联合创始人比尔·盖茨(Bill Gates)在周一接受采访时表示,如果他今天从哈佛大学辍学并开创一家新公司,那么这家公司将会专注于人工智能(A...

linuxCool
昨天
1
0
聊聊feign的Retryer

序 本文主要研究一下feign的Retryer Retryer feign-core-10.2.3-sources.jar!/feign/Retryer.java public interface Retryer extends Cloneable { /** * if retry is permitted, retur......

go4it
昨天
14
0
HyperLogLog简介

  (1)HyperLogLog简介      在Redis 在 2.8.9 版本才添加了 HyperLogLog,HyperLogLog算法是用于基数统计的算法,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个...

SEOwhywhy
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部