技术流ken

运维拯救世界

课堂记录:docker容器操作、端口映射、阿里云仓库(二)–技术流ken

课前复习

 

1.docker组成

 

docker客户端 docker

docker服务器端 docker

docker镜像

docker容器

 

2.docker和kvm对比

kvm虚拟出来的一个虚拟机,docker虚拟出来的一个用户控件

kvm使用复杂。docker使用简单

kvm启动速度分钟即,docker秒级启动

kvm模板文件较大,docker模板文件较小

kvm物理机隔离比较好,docker隔离较差

 

3.docker部署安装

epel,extra,本地源

 

yum install docker-ce -y

 

4. docker镜像加速

默认在dockerhub.com

配置阿里云镜像加速

 

5.docker镜像操作

history 查看镜像的构建历史

inspect 查看镜像的详细信息

load 从压缩包加载镜像

save 把镜像制作成压缩包

ls 查看有哪些镜像

prune 清除没有使用的镜像

pull 拉取镜像

push 推送镜像到镜像仓库

rm 删除镜像 docker rmi

tag 改名

docker容器操作详解

 

run                          运行容器

commit                  使用当前运行的容器制作镜像

exec                        可以在容器中执行命令或者进入容器

inspect                    查看容器的详细信息,也可以查看镜像的信息

kill                             强制杀掉容器

logs                          查看容器产生的日志信息

ls                             查看当前运行的容器

ps                           查看当前运行的容器

pause                      暂停容器

unpause                 开启容器

port                        查 看容器端口映射信息

rename                 对容器改名

restart                   重启容器

start                      启动容器

stop                       停掉容器

rm                          删除容器,默认删除不了正在运行的容器,-f

stats                      查看容器的运行状态

top                         查看容器的系统内存,磁盘使用信息

 

例子1:查看正在运行的容器

[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

例子2:查看所有的容器包括已经停止运行的容器

[root@ken1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
9105c43602d9        nginx-game:v1       "nginx -g 'daemon of…"   32 minutes ago      Exited (0) 13 minutes ago                       laughing_moser
2c85ff7cc53b        nginx-game:v1       "nginx -g 'daemon of…"   19 hours ago        Exited (0) 9 hours ago                          ecstatic_blackburn
6a1d4f6a015c        nginx-game:v1       "nginx -g 'daemon of…"   22 hours ago        Exited (0) 22 hours ago                         youthful_kowalevski
95a695cffb03        nginx-game:v1       "nginx -g 'daemon of…"   22 hours ago        Exited (137) 22 hours ago                       hardcore_shannon
40799b6b38f2        busybox             "/bin/sh"                22 hours ago        Exited (0) 22 hours ago                         infallible_benz
ac864729390b        busybox             "/bin/bash"              22 hours ago        Created                                         elastic_swartz
adbc635a8bf1        busybox             "ip a"                   22 hours ago        Exited (0) 22 hours ago                         nervous_noyce

 

例子3:删除一个容器

方法一:长ID

[root@ken1 ~]# docker rm 9105c43602d9
9105c43602d9

 

方法二:短ID

[root@ken1 ~]# docker rm 2c85ff7
2c85ff7

 

方法三:容器名

[root@ken1 ~]# docker rm youthful_kowalevski
youthful_kowalevski

 

注意:删除镜像一样!

 

例子4:后台运行容器

[root@ken1 ~]# docker run -d nginx-game:v1
72f712bff84eff8ad0b371291ff488d21f25aca69c2f08a1fd52dd2718d2158c
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        80/tcp              laughing_lovelace

 

例子5:运行容器加多个参数

[root@ken1 ~]# docker run --name nginxtest -d --rm nginx-game:v1
2cdec372f4350dea46b9fc6ce37d14314a4ef1351f2ec10da662aa36919b6bbe
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2cdec372f435        nginx-game:v1       "nginx -g 'daemon of…"   3 seconds ago       Up 2 seconds        80/tcp              nginxtest

–name 指定容器名字

-d 后台运行

–rm 容器停掉之后自动删除

 

例子6:批量删除容器

[root@ken1 ~]# docker rm  $(docker ps -aq)
95a695cffb03
40799b6b38f2
ac864729390b
adbc635a8bf1

 

注意:

这样只能删除已经退出的容器,无法删除正在运行的容器

如果也想要删掉正在运行的容器,可以在docker rm 后加-f选项进行强制删除

 

 

例子7:查看容器信息

[root@ken1 ~]# docker inspect 72f712bff84e

 

注:

查看容器暴露的端口:

方法一:

docker history IMAGE_ID

 

方法二:

查看容器详细信息 docker inspect  CONTAINER_ID

 

 

例子8:查看容器运行状态

[root@ken1 ~]# docker stats 72f712bff84e
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
72f712bff84e        laughing_lovelace   0.00%               1.344MiB / 1.779GiB   0.07%               648B / 0B           0B / 0B             2

 

例子9:对容器内存使用量进行限制

[root@ken1 ~]# docker run -d -m 64M nginx-game:v1

-m选项指定容器可以使用的内存量

 

例子10:停止容器

[root@ken1 ~]# docker stop 8cd65493c7c1 
8cd65493c7c1
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes       80/tcp              laughing_lovelace

 

例子11:启动容器

[root@ken1 ~]# docker start 8cd65493c7c1
8cd65493c7c1
[root@ken1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   2 minutes ago       Up 1 second         80/tcp              loving_sammet
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes       80/tcp              laughing_lovelace

 

例子12:杀掉容器

[root@ken1 ~]# docker kill 8cd65493c7c1
8cd65493c7c1
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   16 minutes ago      Up 16 minutes       80/tcp              laughing_lovelace
[root@ken1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   2 minutes ago       Exited (137) 6 seconds ago                       loving_sammet
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   16 minutes ago      Up 16 minutes                80/tcp              laughing_lovelace

 

docker容器操作的kill和stop区别:

stop优雅退出。-15 10秒之后-9

kill -9

 

例子13:查看容器日志

[root@ken1 ~]# docker logs 8cd65493c7c1

 

持续刷新检测日志:

[root@ken1 ~]# docker logs 8cd65493c7c1 -f

-f 持续刷新

 

例子14:容器改名

[root@ken1 ~]# docker rename loving_sammet nginx-game

 

例子14:查看容器系统使用信息

[root@ken1 ~]# docker top nginx-game
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3054                3036                0                   18:04               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 3088                3054                0                   18:04               ?                   00:00:00            nginx: worker process

 

例子15:暂停容器

[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS               NAMES
8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   12 minutes ago      Up 9 minutes (Paused)   80/tcp              nginx-game

 

例子16:再开启容器

[root@ken1 ~]# docker unpause nginx-game
nginx-game
[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8cd65493c7c1        nginx-game:v1       "nginx -g 'daemon of…"   13 minutes ago      Up 9 minutes        80/tcp              nginx-game

 

例子17:查看容器端口映射信息

[root@ken1 ~]# docker port 8cd65493c7c1 

 

例子18:进入容器

[root@ken1 ~]# docker exec -it 8cd65493c7c1  sh
# 
# 
# 
# exit
[root@ken1 ~]# docker exec -it 8cd65493c7c1  bash
root@8cd65493c7c1:/# 
root@8cd65493c7c1:/# 
root@8cd65493c7c1:/# 

 

可以选择使用sh和bash进入容器

 

 

总结:进入容器的方式:4种进入容器的方法

方法一:exec  #在容器里面退出,容器本身不会退出

方法二:attach  #容器本身退出 exitd

方法三:ssh

方法四:nsenter

 

端口映射

 

实现了外部环境访问容器内部

 

四类端口映射:

 

第一类:把容器的端口随机映射为物理机的一个端口

第二类:把容器的端口映射为物理机特定的一个端口

第三类:把容器的端口映射为物理机特定网卡上的特定端口

第四类:把容器的端口映射为物理机特定网卡上的随机端口

 

第一类:把容器的端口随机映射为物理机的一个端口

使用的是大写的-P

[root@ken1 ~]# docker run -d -P httpd   #随机映射为物理机的端口
cd662b604a59f6715b28c1af62956dbf665d5c4916897fbeb844e0e77ba8b99e
[root@ken1 ~]# docker ps    #可以查看到容器映射信息
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
cd662b604a59        httpd               "httpd-foreground"       12 seconds ago      Up 11 seconds       0.0.0.0:32768->80/tcp   happy_cray
50405dd6b651        httpd               "httpd-foreground"       6 minutes ago       Up 6 minutes        80/tcp                  busy_ardinghelli
72f712bff84e        nginx-game:v1       "nginx -g 'daemon of…"   About an hour ago   Up About an hour    80/tcp                  laughing_lovelace
[root@ken1 ~]# ss -tnl   #物理机启动会了相应的端口
State       Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN      0      128                               *:22                                            *:*                  
LISTEN      0      100                       127.0.0.1:25                                            *:*                  
LISTEN      0      128                              :::32768                                        :::*                  
LISTEN      0      128                              :::22                                           :::*                  
LISTEN      0      100                             ::1:25                                           :::*              

 

或者

[root@ken1 ~]# docker port cd662b604a59
80/tcp -> 0.0.0.0:32768

 

注意:

使用-P选线。是把容器内所有expose的端口都映射为物理机的随机端口

 

第二类:把容器端口映射为物理机特点端口

使用的是小写的-p

[root@ken1 ~]# docker run -d -p 80:80  httpd  #使用小写p进行特定端口映射
15a01c693f4c4ffc0774bcb535fc5ec415aec9944f295ae9d468915b35019fae
[root@ken1 ~]# docker port 15a01c693f4c
80/tcp -> 0.0.0.0:80
[root@ken1 ~]# ss -tnl
State       Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN      0      128                               *:22                                            *:*                  
LISTEN      0      100                       127.0.0.1:25                                            *:*                  
LISTEN      0      128                              :::32768                                        :::*                  
LISTEN      0      128                              :::80                                           :::*                  
LISTEN      0      128                              :::22                                           :::*                  
LISTEN      0      100                             ::1:25                                           :::*        

 

– p 80:80  第一个80是 物理机端口,第二个80是容器端口,顺序不能乱!另外物理机的端口不能被占用!

 

第三类:把容器端口映射为特点网卡上的随机端口

使用小写的p

[root@ken1 ~]# docker run -d -p 192.168.163.151::80 httpd
ba79a389a467f56c31a0f8489c39a35c756d56bd6a53486d4bee68b3103589bf
[root@ken1 ~]# docker port ba79a389a467f56c31a0f
80/tcp -> 192.168.163.151:32769

-p 192.168.163.151::80把容器的80端口随机映射为192.168.163.151上的一个随机端口

 

第四类:把容器端口映射为特点网卡上的特点端口

[root@ken1 ~]# docker run -d -p 192.168.163.151:81:80 httpd
64ce1f926979f66992a0377fabef5859b45d9466854649b457d741e3020257d6
[root@ken1 ~]# docker port 64ce1f926979f66
80/tcp -> 192.168.163.151:81
[root@ken1 ~]# ss -tnl
State       Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN      0      128                 192.168.163.151:32769                                         *:*                  
LISTEN      0      128                 192.168.163.151:81                                            *:*            

-p 192.168.163.151:81:80 把容器80端口映射为192.168.163.151上的81端口

 

 

总结;

1.在端口映射中使用到了两个选项一个是大写的P,表示把容器暴露的端口随机映射为物理机上的一个随机端口,不能指定特定网卡

2.另外一个是小写的p,可以把容器暴露的端口映射为物理机特定的端口

3.或者映射为物理机特定网卡上的随机端口

4.或者特定网卡上的特定端口

 

 

使用commit制作镜像

制作镜像的方法:

方法一:

commit

使用commit制作镜像使基于一个现有的容器

 

 

方法二:

Dockefile

 

 

 

使用commit制作镜像实践

 

第一步:启动容器

[root@ken1 ~]# docker run -d httpd

 

第二步:修改网站首页文件

[root@ken1 ~]# docker exec -it 3cf31d57a61569c09c8024 bash
root@3cf31d57a615:/usr/local/apache2# pwd
/usr/local/apache2
root@3cf31d57a615:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs	modules
root@3cf31d57a615:/usr/local/apache2# cd htdocs/
root@3cf31d57a615:/usr/local/apache2/htdocs# ls
index.html
root@3cf31d57a615:/usr/local/apache2/htdocs# echo "this is for testing commit" > index.html 
root@3cf31d57a615:/usr/local/apache2/htdocs# exit
exit
[root@ken1 ~]# curl 192.168.163.5:88
this is for testing commit

 

第三步:进行commit提交

[root@ken1 ~]# docker commit -p 3cf31d57a61569c09c8 nginx-com:v1
sha256:5de6e803346c00b4373ad2b49b9caf0dbe12f23a105d8a47c6e6aaca465ff6e6
[root@ken1 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx-com           v1                  5de6e803346c        4 seconds ago       178MB

 

现在就可以把配置好的环境发送给其他人使用

 

第四步:把镜像制作成压缩包

[root@ken1 ~]# docker image save nginx-com:v1 > nginx-com.tar
[root@ken1 ~]# ls
anaconda-ks.cfg  busybox1.31-v2.tar  httpd_img.tar.gz  nginx-game.tar  test1
busybox1.31.tar  docker-speend.sh    nginx-com.tar     test

 

第五步:进行发送

[root@ken1 ~]# scp nginx-com.tar 192.168.163.134:/root
root@192.168.163.134's password: 
nginx-com.tar                                                                            100%  178MB  37.2MB/s   00:04   

 

第六步:其他人进行使用

[root@ken-node3 ~]# docker image load < nginx-com.tar 
9f5d674a9055: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx-com:v1
[root@ken-node3 ~]# docker image ls
REPOSITORY             TAG                 IMAGE ID            CREATED                  SIZE
nginx-com              v1                  5de6e803346c        Less than a second ago   178MB
[root@ken-node3 ~]# docker run -d -p 87:80 nginx-com:v1
515ec3c0d991ea617dfa243096538d78ba323b1b96c2e8ab13f5d61f1d5ea45d
[root@ken-node3 ~]# curl 192.168.163.134:87
this is for testing commit

 

阿里云镜像仓库

 

镜像仓库

1,阿里云镜像仓库

2.dockerhub

3.registory私有镜像仓库

 

 

使用阿里云镜像仓库

 

第一步:注册登录

 

第二步:创建镜像仓库

 

第三步:命令行登录阿里云

[root@ken1 ~]# docker login --username=kenkendyg registry.cn-hangzhou.aliyuncs.com
Password:    #是你注册的阿里云账号密码
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 

第四步:改名

[root@ken1 ~]# docker tag nginx-com:v1 registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1
[root@ken1 ~]# docker image ls
REPOSITORY                                           TAG                 IMAGE ID            CREATED             SIZE
nginx-com                                            v1                  5de6e803346c        11 minutes ago      178MB
registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com   v1                  5de6e803346c        11 minutes ago      178MB

 

第五步:推送

[root@ken1 ~]# docker push registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1

 

第六步:查看

阿里云镜像版本

 

第七步:拉取

[root@ken-node3 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1

 

可以进行改名操作

第一步:首先查看相关镜像

[root@ken-node3 ~]# docker image ls
REPOSITORY                                           TAG                 IMAGE ID            CREATED                  SIZE
nginx-com                                            v1                  5de6e803346c        Less than a second ago   178MB
registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com   v1                  5de6e803346c        Less than a second ago   178MB

 

第二步:改名

[root@ken-node3 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1 nginx-com:v1

 

第三步:删除相关镜像

[root@ken-node3 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1

 

 

镜像分类:

1,工具类的镜像(容器)

2,服务类的镜像(容器)

 

工具类镜像比如busybox,centos启动工具类镜像是使用交互模式docker run -it

服务类镜像比如nginx,redis,httpd启动服务类镜像使用的是docker -d

 

发表评论

电子邮件地址不会被公开。