• 生活的道路一旦选定,就要勇敢地走到底,决不回头。——左拉
  • 坚强的信心,能使平凡的人做出惊人的事业。——马尔顿
  • 人不可有傲气,但不可无傲骨。 --徐悲鸿
  • 古之立大志者,不惟有超世之才,亦必有坚韧不拔之志。 --苏轼
  • 时间像海绵里的水,只要你愿意挤,总还是有的。 --鲁迅

Docker入门

DevOps zkinogg 8个月前 (08-24) 81次浏览 0个评论

Docker入门总结


# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
systemctl start docker

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ee.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#

# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

安装验证

root@iZbp12adskpuoxodbkqzjfZ:$ docker version
Client:
 Version:      17.03.0-ce
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.0-ce
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64
 Experimental: false

编辑配置文件

#vim /etc/docker/daemon.json
{
  "graph": "/data/docker", # 工作目录
  "storage-driver": "overlay2", # 存储驱动
  "insecure-registries": ["registry.access.redhat.com","quay.io","harbor.od.com"], # 个人私有仓库地址
  "registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"], # 阿里云镜像
  "bip": "172.7.21.1/24", # 中间两位为物理机ip,docker网络
  "exec-opts": ["native.cgroupdriver=systemd"],
  "live-restore": true
}

启动docker服务

systemctl enable docker
systemctl start docker

查看docker信息

docker info

启动第一个docker容器

docker run hello-world

镜像

dyM3b8.png

镜像的结构

${registry_name}/${repository_name}/${image_name}:${tag_name}
registry_name:远端仓库地址
repository_name:分类仓库名
image_name:镜像名字
tag_name:镜像版本

# 例如:
docker.io/library/alpine:latest

仓库注册

hub.docker 注册登录

<https://hub.docker.com/>  账号 zkinogg 密码zx19950923123
#登录hub账号密码
[root@db01 test]# docker login docker.io
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: zkinogg
Password: 
Login Succeeded

 
 # 查看登录账号密码
[root@db01 test]# cat /root/.docker/config.json 
{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "emtpbm9nZzp6eDE5OTUwOTIzMTIz"
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/18.03.1-ce (linux)"
    }
}
#解密
[root@db01 test]# echo "emtpbm9nZzp6eDE5OTUwOTIzMTIz" | base64 -d
zkinogg:zx19950923123

dyMMvt.png

搜索镜像

docker search alpine

下载镜像

[root@db01 ~]# docker pull alpine 或者
[root@db01 ~]# docker pull docker.io/library/alpine:3.10.1

docker.io/library/alpine:latest
远端仓库地址  仓库名  镜像名    标签(版本)

查看本地镜像

docker images

镜像打标签

[root@db01 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              3.10.3              965ea09ff2eb        9 months ago        5.55MB

# 打标签
[root@db01 ~]# docker tag 965ea09ff2eb docker.io/zkinogg/alpine:v3.10.3
[root@db01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              3.10.3              965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      v3.10.3             965ea09ff2eb        10 months ago       5.55MB

推镜像

docker push zkinogg/alpine:latest
[root@db01 ~]# docker push docker.io/zkinogg/alpine:v3.10.3
The push refers to repository [docker.io/zkinogg/alpine]
77cae8ab23bf: Pushing  5.815MB

删除镜像标签

[root@db01 ~]# docker images|grep alpine
alpine              latest              a24bb4013296        2 months ago        5.57MB
zkinogg/alpine    latest              965ea09ff2eb        9 months ago        5.55MB
zkinogg/alpine    v3.10.3             965ea09ff2eb        9 months ago        5.55MB
alpine              3.10.3              965ea09ff2eb        9 months ago        5.55MB
alpine              3.10.1              b7b28af77ffe        13 months ago       5.58MB
#删除标签
[root@db01 ~]# docker rmi docker.io/zkinogg/alpine:latest
Untagged: zkinogg/alpine:latest
[root@db01 ~]# docker images|grep alpine
alpine              latest              a24bb4013296        2 months ago        5.57MB
zkinogg/alpine    v3.10.3             965ea09ff2eb        9 months ago        5.55MB
alpine              3.10.3              965ea09ff2eb        9 months ago        5.55MB
alpine              3.10.1              b7b28af77ffe        13 months ago       5.58MB

删除镜像

[root@db01 ~]# docker images|grep alpine
alpine              latest              a24bb4013296        2 months ago        5.57MB
zkinogg/alpine    v3.10.3             965ea09ff2eb        9 months ago        5.55MB
alpine              3.10.3              965ea09ff2eb        9 months ago        5.55MB
alpine              3.10.1              b7b28af77ffe        13 months ago       5.58MB
#删除镜像
[root@db01 ~]# docker rmi -f 965ea09ff2eb 

容器管理

查看本地容器进程

[root@db01 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
b9b2e96b8dbc        hello-world         "/hello"            About an hour ago   Exited (0) About an hour ago                       angry_mclaren

启动容器(运行镜像)

docker run是日常用的最频繁用的命令之一, 同样也是较为复杂的命令之一
命令格式: docker run [OPTIONS] IMAGE [COMMAND][ARG..]
OPTIONS :选项

-i :表示启动一一个可交互的容器,并持续打开标准输入
-t :表示使用终端关联到容器的标准输入输出上
-d :表示将容器放置后台运行
--rm:退出后即删除容器
-name :表示定义容器唯一名称
IMAGE : 表示要运行的镜像
COMMAND :表示启动容器时要运行的命令*

交互式启动一个容器


[root@db01 docker]# docker run -ti zkinogg/alpine:latest /bin/sh
/ # ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
7: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:07:15:02 brd ff:ff:ff:ff:ff:ff
    inet 172.7.21.2/24 brd 172.7.21.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # cat /etc/issue 
Welcome to Alpine Linux 3.10
Kernel \r on an \m (\l)

/ # exit

一次性容器

docker run --rm zkinogg/alpine:latest /bin/echo hello

非交换式启动后台容器

docker run -d --name myalpine zkinogg/alpine:latest /bin/sleep 300
后台 挂300 秒后退出

查看宿主机进程

ps -aux|grep sleep|grep -v grep

进入容器

#正在运行容器的 id | name
docker exec -ti 15eb39a2a758 /bin/sh

关闭启动容器

docker start/stop/restart 15eb39a2a758 | name

删除容器

docker rm  myalpine1 | id
运行中的不能删除
使用 -f 强制删除

#循环删除已退出容器(生产中最常用的小脚本)
for i in `docker ps -a|grep -i exit|awk '{print $1}'`; do docker rm -f $i;done

提交容器(将修改内容固化到镜像中。生成新的镜像)

[root@db01 ~]# docker exec -it zx /bin/sh
/ # ls /
bin    etc    lib    mnt    proc   run    srv    tmp    var
dev    home   media  opt    root   sbin   sys    usr
/ # echo hello > 1.txt
/ # ls
1.txt  dev    home   media  opt    root   sbin   sys    usr
bin    etc    lib    mnt    proc   run    srv    tmp    var


[root@db01 ~]# docker commit -p zx zkinogg/alpine:v3.10.3_with_1.txt

docker  export id > xxx.tar

#提交容器做镜像 保存
[root@db01 ~]# docker images
REPOSITORY          TAG                  IMAGE ID            CREATED             SIZE
zkinogg/alpine      v3.10.3_with_1.txt   111a7f300156        4 seconds ago       5.55MB
hello-world         latest               bf756fb1ae65        7 months ago        13.3kB
alpine              3.10.3               965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      latest               965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      v3.10.3              965ea09ff2eb        10 months ago       5.55MB
[root@db01 ~]# docker run -it zkinogg/alpine:v3.10.3_with_1.txt  /bin/sh
/ # ls
1.txt  dev    home   media  opt    root   sbin   sys    usr
bin    etc    lib    mnt    proc   run    srv    tmp    var

导出镜像

[root@db01 ~]# docker save 111a7f300156 > alpine:v3.10.3_with_1.txt.tar
[root@db01 ~]# ll
total 5704
-rw-r--r--  1 root root 5829632 Aug 25 04:19 alpine:v3.10.3_with_1.txt.tar



#删除掉镜像
[root@db01 ~]# docker rmi -f 111a7f300156

导入镜像

[root@db01 ~]# ll
total 5704
-rw-r--r--  1 root root 5829632 Aug 25 04:31 alpine:v3.10.3_with_1.txt.tar

[root@db01 ~]# docker load < alpine\:v3.10.3_with_1.txt.tar 
Loaded image ID: sha256:68a44a6689f09537f2bd819ae6c86d361bb65e098a4982a2b575181bad6738ad
[root@db01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              68a44a6689f0        2 minutes ago       5.55MB
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB
alpine              3.10.3              965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      latest              965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      v3.10.3             965ea09ff2eb        10 months ago       5.55MB
##  发现没有标签了。进行打标签
[root@db01 ~]# docker tag 68a44a6689f0 zkinogg/alpine:v3.10.1.1.txt
[root@db01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zkinogg/alpine      v3.10.1.1.txt       68a44a6689f0        2 minutes ago       5.55MB
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB
alpine              3.10.3              965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      latest              965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      v3.10.3             965ea09ff2eb        10 months ago       5.55MB

[root@db01 ~]# ll
total 5704
-rw-r--r--  1 root root 5829632 Aug 25 04:31 alpine:v3.10.3_with_1.txt.tar

[root@db01 ~]# docker load < alpine\:v3.10.3_with_1.txt.tar 
Loaded image ID: sha256:68a44a6689f09537f2bd819ae6c86d361bb65e098a4982a2b575181bad6738ad
[root@db01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              68a44a6689f0        2 minutes ago       5.55MB
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB
alpine              3.10.3              965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      latest              965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      v3.10.3             965ea09ff2eb        10 months ago       5.55MB
[root@db01 ~]# docker tag 68a44a6689f0 zkinogg/alpine:v3.10.1.1.txt
[root@db01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zkinogg/alpine      v3.10.1.1.txt       68a44a6689f0        2 minutes ago       5.55MB
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB
alpine              3.10.3              965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      latest              965ea09ff2eb        10 months ago       5.55MB
zkinogg/alpine      v3.10.3             965ea09ff2eb        10 months ago       5.55MB

镜像特性

# 1.Docker 镜像位于bootfs之上
# 2.每一层镜像的下面一层称为其父镜像(父子关系)
# 3.第一层镜像为Base Image
# 4.容器在最顶层
# 5.其下的所有层都为readonly(只读)
# 6.Docker将readonly的FS层称为'image'

dyMKgI.png

容器日志

[root@db01 ~]# docker run hello-world 2>&1 >>/dev/null
[root@db01 ~]# docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                     PORTS               NAMES
d5d4d11da1c2        hello-world             "/hello"            6 seconds ago       Exited (0) 6 seconds ago                       wonderful_engelbart
14418a3b6ece        68a44a6689f0            "/bin/sh"           9 minutes ago       Exited (0) 9 minutes ago                       cool_kilby
ce80540dfcfb        zkinogg/alpine:latest   "/bin/sleep 300"    10 minutes ago      Exited (0) 5 minutes ago                       myalpine


[root@db01 ~]# docker logs d5d4d11da1c2

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/



dyM1Df.png

dyMlKP.png

容器高级操作

dyMJUg.png

端口映射

# 拉镜像
docker pull nginx:1.12.2
# 打标签
docker tag 4037a5562b03 zkinogg/nginx:v1.12.2
# 查看镜像
 docker images
# 启动并端口映射
docker run --rm --name mynginx -d -p81:80 zkinogg/nginx:v1.12.2

检测81
[root@db01 ~]# curl 127.0.0.1:81
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

挂载数据卷

mkdir html
cd html
wget www.baidu.com -O index.html

# -v/root/html:/usr/share/nginx/html

docker run  --rm --name nginx_html -d -p81:80 -v/root/html:/usr/share/nginx/html zkinogg/nginx:v1.12.2

[root@db01 html]# docker run  --rm --name nginx_html -d -p82:80 -v/root/html:/usr/share/nginx/html zkinogg/nginx:v1.12.2
3b59532c19372a0f54083ca94e1b9f40874a991b5b6d1df993c8f69cf442c9de

[root@db01 html]# docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                      PORTS                NAMES
3b59532c1937        zkinogg/nginx:v1.12.2   "nginx -g 'daemon of…"   24 seconds ago      Up 24 seconds               0.0.0.0:82->80/tcp   nginx_html
97e1bc05d976        zkinogg/nginx:v1.12.2   "nginx -g 'daemon of…"   7 minutes ago       Up 7 minutes                0.0.0.0:81->80/tcp   mynginx
d5d4d11da1c2        hello-world             "/hello"                 22 minutes ago      Exited (0) 22 minutes ago                        wonderful_engelbart
14418a3b6ece        68a44a6689f0            "/bin/sh"                31 minutes ago      Exited (0) 31 minutes ago                        cool_kilby
ce80540dfcfb        zkinogg/alpine:latest   "/bin/sleep 300"         33 minutes ago      Exited (0) 28 minutes ago                        myalpine



#inspect 检查容器信息

#查看挂载
[root@db01 html]# docker inspect 3b59532c1937|grep share
                "/root/html:/usr/share/nginx/html"
                "Destination": "/usr/share/nginx/html",
                
                [root@db01 html]# docker  inspect 3b59532c1937

dyMGVS.png

传递环境变量

让容器以预期的方式启动(之所以叫云源生,就是因为可以传递环境变量)

而虚机想要传递一些参数 非常麻烦

[root@db01 html]# docker run --rm -e E_OPTS=abcd -e C_OPTS=12345 zkinogg/alpine:latest printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=10b3a0d10a3b
E_OPTS=abcd
C_OPTS=12345
HOME=/root


docker exec -it nginx_with_baidu /bin/bash

tee /etc/apt/sources.list << EOF
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
EOF

apt-get update && apt-get install curl -y

容器的生命周期
1 检查本地是否存在镜像,如果不存在即从远端仓库检索
2 利用镜像启动容器
3 分配一个文件系统,并在只读的镜像层外挂载一层可读写层
4 从宿主机配置的网桥接口中桥接一个虚拟接口道容器
5 从地址池配置一个ip地址给容器
6 执行用户指定的指令
7 执行完毕后容器终止

极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Docker入门
喜欢 (0)
[17551054905]
分享 (0)

您必须 登录 才能发表评论!