docker镜像的使用和docker容器的连接、仓库管理

学习目标:

docker 学习三、


学习内容:

1、镜像的使用
2、容器的连接
3、docker仓库管理


1、镜像的使用

1、获取一个新的镜像以及显示本地的镜像并启动一个

docker pull 镜像:获取一个新镜像
docker images :显示本地镜像
docker run -itd 镜像:启动一个镜像

[root@ecs-24bf ~]# docker pull ubuntu:15.10
15.10: Pulling from library/ubuntu
7dcf5a444392: Pull complete 
759aa75f3cee: Pull complete 
3fa871dc8a2b: Pull complete 
224c42ae46e7: Pull complete 
Digest: sha256:02521a2d079595241c6793b2044f02eecf294034f31d6e235ac4b2b54ffc41f3
Status: Downloaded newer image for ubuntu:15.10
docker.io/library/ubuntu:15.10
[root@ecs-24bf ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB
ubuntu              15.10               9b9cb95443b5        4 years ago         137MB
training/webapp     latest              6fae60ef3446        5 years ago         349MB
[root@ecs-24bf ~]# docker run -itd ubuntu:15.10 /bin/bash
996ad1cdda4854fd12ba4be735099bdf64ec2b9fe4d05870cfb96990483b0d7d
  • -i: 交互式操作
  • -t: 终端
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash

2、从搜索镜像、拉取镜像、删除镜像

docker search 镜像名:从网上搜寻需要的镜像
docker pull 镜像名 :从网上拉取镜像下载 docker rmi
镜像名:从本地删除不需要的镜像 [

root@ecs-24bf ~]# docker search httpd
NAME                                    DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
httpd                                   The Apache HTTP Server Project                  3230                [OK]                
centos/httpd-24-centos7                 Platform for running Apache httpd 2.4 or bui…   36                                      
centos/httpd                                                                            32                                      [OK]
arm32v7/httpd                           The Apache HTTP Server Project                  9                                       
polinux/httpd-php                       Apache with PHP in Docker (Supervisor, CentO…   4                                       [OK]
...
[root@ecs-24bf ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
bb79b6b2107f: Pull complete 
26694ef5449a: Pull complete 
7b85101950dd: Pull complete 
da919f2696f2: Pull complete 
3ae86ea9f1b9: Pull complete 
Digest: sha256:b82fb56847fcbcca9f8f162a3232acb4a302af96b1b2af1c4c3ac45ef0c9b968
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
[root@ecs-24bf ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               latest              3dd970e6b110        2 weeks ago         138MB
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB
ubuntu              15.10               9b9cb95443b5        4 years ago         137MB
training/webapp     latest              6fae60ef3446        5 years ago         349MB
[root@ecs-24bf ~]# docker rmi bf756fb1ae65
Untagged: hello-world:latest
Untagged: hello-world@sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
Deleted: sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63

3、通过更改原镜像创建新镜像

  • 开启一个镜像成为一个容器,在里面做出改动,然后把这个容器做成镜像,便是一个不一样的镜像

docker commit -m=“描述” -a=“镜像作者” 容器ID 创建的容器名:提交一个有某某创建的新容器
docker run -itd 容器名:启动某个容器(-d在后台运行)

 [root@ecs-24bf ~]# docker run -it ubuntu:15.10 /bin/bash
root@869bde2db184:/# ls -l
total 64
drwxr-xr-x  2 root root 4096 Jul  6  2016 bin
drwxr-xr-x  2 root root 4096 Oct 19  2015 boot
drwxr-xr-x  5 root root  360 Nov  1 08:46 dev
drwxr-xr-x  1 root root 4096 Nov  1 08:46 etc
drwxr-xr-x  2 root root 4096 Oct 19  2015 home
drwxr-xr-x  8 root root 4096 Sep 13  2015 lib
...
root@869bde2db184:/# mkdir yyt
root@869bde2db184:/# ls -l
...
drwxr-xr-x  1 root root 4096 Jul 22  2016 var
drwxr-xr-x  2 root root 4096 Nov  1 08:46 yyt
root@869bde2db184:/# exit
exit
[root@ecs-24bf ~]# docker commit -m="add yyt" -a="ecs" 869bde2db184 ecs/ubuntu:v2
sha256:f86cd415e44bd5f36af9dabc4bf351983a874572741bde80c0a93276bb8cf0ea
[root@ecs-24bf ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
ecs/ubuntu          v2                  f86cd415e44b        About a minute ago   137MB
...
[root@ecs-24bf ~]# docker run -it ecs/ubuntu:v2 /bin/bash
root@346df4b12ae9:/# exit
exit

4、设置镜像标签

docker tag 容器ID 作者名/新标签:创建一个新的标签

[root@ecs-24bf ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ecs/ubuntu          v2                  f86cd415e44b        16 minutes ago      137MB
httpd               latest              3dd970e6b110        2 weeks ago         138MB
ubuntu              15.10               9b9cb95443b5        4 years ago         137MB
training/webapp     latest              6fae60ef3446        5 years ago         349MB
[root@ecs-24bf ~]# docker tag f86cd415e44b ecs/ubuntu:v3
[root@ecs-24bf ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ecs/ubuntu          v2                  f86cd415e44b        18 minutes ago      137MB
ecs/ubuntu          v3                  f86cd415e44b        18 minutes ago      137MB
httpd               latest              3dd970e6b110        2 weeks ago         138MB
ubuntu              15.10               9b9cb95443b5        4 years ago         137MB
training/webapp     latest              6fae60ef3446        5 years ago         349MB

2、容器的连接

1、网络端口映射

docker run -d -P 作者 容器名:创建了一个 python 应用的容器
docker port 容器名 端口:快捷地查看容器端口的绑定情况
-P :是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口
默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp

[root@ecs-24bf ~]# docker run -d -P training/webapp python app.py
d09f46081205a09836703664f39599af43b50bac3e179e8ca1ebaa206d679115
[root@ecs-24bf ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
d09f46081205        training/webapp     "python app.py"     31 seconds ago      Up 30 seconds       0.0.0.0:32768->5000/tcp   priceless_mcclintock
[root@ecs-24bf ~]# docker run -d -p 5000:5000 training/webapp python app.py
5a573a2d1a969bdfb7f923a462d3160f1304e65247c54ec3504a738c22eaf88f
[root@ecs-24bf ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                     NAMES
5a573a2d1a96        training/webapp     "python app.py"     5 seconds ago        Up 3 seconds        0.0.0.0:5000->5000/tcp    epic_morse
d09f46081205        training/webapp     "python app.py"     About a minute ago   Up About a minute   0.0.0.0:32768->5000/tcp   priceless_mcclintock
[root@ecs-24bf ~]# docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
7f3cd5c5eb2c74a9f13fa6a0190ea5cc789e2e8d03f978bebe96f716f00cbccd
[root@ecs-24bf ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
7f3cd5c5eb2c        training/webapp     "python app.py"     4 seconds ago       Up 3 seconds        127.0.0.1:5001->5000/tcp   relaxed_napier
5a573a2d1a96        training/webapp     "python app.py"     59 seconds ago      Up 58 seconds       0.0.0.0:5000->5000/tcp     epic_morse
d09f46081205        training/webapp     "python app.py"     2 minutes ago       Up 2 minutes        0.0.0.0:32768->5000/tcp    priceless_mcclintock
[root@ecs-24bf ~]# docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
00f312fd9b1af6719327008d75675965e0236a578434c93a2a3f5403cd0629c6
[root@ecs-24bf ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                                NAMES
00f312fd9b1a        training/webapp     "python app.py"     5 seconds ago        Up 4 seconds        5000/tcp, 127.0.0.1:5000->5000/udp   dazzling_bhaskara
7f3cd5c5eb2c        training/webapp     "python app.py"     About a minute ago   Up About a minute   127.0.0.1:5001->5000/tcp             relaxed_napier
5a573a2d1a96        training/webapp     "python app.py"     2 minutes ago        Up 2 minutes        0.0.0.0:5000->5000/tcp               epic_morse
d09f46081205        training/webapp     "python app.py"     4 minutes ago        Up 4 minutes        0.0.0.0:32768->5000/tcp              priceless_mcclintock
[root@ecs-24bf ~]# docker port epic_morse
5000/tcp -> 0.0.0.0:5000

2、容器命名、新建网络

docker run -d -P --name 命名 容器名:容器的命名( --name 标识来命名容器)
docker network create -d bridge 网络名:创建一个网络 (-d:参数指定 Docker 网络类型,有 bridge、overlay)
docker network ls:展示现有的网络

[root@ecs-24bf ~]# docker run -d -P --name test training/webapp python app.py
d9e17e4c07f81da718632a0b927eeafc0c71f6fb36d9faf2ad8dcde5b2301dd9
[root@ecs-24bf ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                NAMES
d9e17e4c07f8        training/webapp     "python app.py"     3 seconds ago       Up 3 seconds        0.0.0.0:32769->5000/tcp              test
00f312fd9b1a        training/webapp     "python app.py"     15 minutes ago      Up 15 minutes       5000/tcp, 127.0.0.1:5000->5000/udp   dazzling_bhaskara
7f3cd5c5eb2c        training/webapp     "python app.py"     16 minutes ago      Up 16 minutes       127.0.0.1:5001->5000/tcp             relaxed_napier
5a573a2d1a96        training/webapp     "python app.py"     17 minutes ago      Up 17 minutes       0.0.0.0:5000->5000/tcp               epic_morse
d09f46081205        training/webapp     "python app.py"     19 minutes ago      Up 19 minutes       0.0.0.0:32768->5000/tcp              priceless_mcclintock
[root@ecs-24bf ~]# docker network create -d bridge test-net
a80549796d7d1c28f44fd04c385e7d5cdc1965b673b4ba1c786b06e05414bc32
[root@ecs-24bf ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
4380948bbba2        bridge              bridge              local
73dfa4a2c606        host                host                local
ea01efda4738        none                null                local
a80549796d7d        test-net            bridge              local

3、连接容器

  • 开启两个容器,分别进入容器安装ping命令包,测试能否ping通

docker run -itd --name 用户名 --network 网络名 容器名:运行容器并且绑定上网络
docker exec -it 用户名 /bin/bash:进如指定容器
apt install iputils-ping:安装ping命令

[root@ecs-24bf ~]# docker run -itd --name test1 --network test-net ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6a5697faee43: Pull complete 
ba13d3bc422b: Pull complete 
a254829d9e55: Pull complete 
Digest: sha256:fff16eea1a8ae92867721d90c59a75652ea66d29c05294e6e2f898704bdb8cf1
Status: Downloaded newer image for ubuntu:latest
99884137d0e287940ef0751fc4beda8116c847acf674d819d7dd774ca1d69a4d
[root@ecs-24bf ~]# docker run -itd --name test2 --network test-net ubuntu /bin/bash
536dfd44f29974911521ada4924d7e36a5d883fa689d92ee802d30dbf4ab94d7
[root@ecs-24bf ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                NAMES
536dfd44f299        ubuntu              "/bin/bash"         15 seconds ago      Up 15 seconds                                            test2
99884137d0e2        ubuntu              "/bin/bash"         7 minutes ago       Up 7 minutes                                             test1
...
[root@ecs-24bf ~]# docker exec -it test1 /bin/bash
root@99884137d0e2:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB]
...
root@99884137d0e2:/# apt install iputils-ping
Reading package lists... Done
Building dependency tree       
Reading state information... Done
...
[root@ecs-24bf ~]# docker exec -it test2 /bin/bash
root@536dfd44f299:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB]
...
root@536dfd44f299:/# apt install iputils-ping
Reading package lists... Done
Building dependency tree       
Reading state information... Done
...
root@536dfd44f299:/# ping test1
PING test1 (172.18.0.2) 56(84) bytes of data.
64 bytes from test1.test-net (172.18.0.2): icmp_seq=1 ttl=64 time=0.069 ms
64 bytes from test1.test-net (172.18.0.2): icmp_seq=2 ttl=64 time=0.059 ms
64 bytes from test1.test-net (172.18.0.2): icmp_seq=3 ttl=64 time=0.063 ms

4、配置DNS

  • 在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
  "dns" : [
    "114.114.114.114",
    "8.8.8.8"
  ]
}
启动容器的 DNS 会自动配置为 114.114.114.1148.8.8.8

查看容器的 DNS 是否生效:

docker run -it --rm ubuntu cat etc/resolv.conf

  • 手动指定容器的配置

docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu

  • 注:

–rm:容器退出时自动清理容器内部的文件系统
-h HOSTNAME 或者 -hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts
–dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名
–dns-search=DOMAIN: 设定容器的搜索域

  • 如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf来配置容器的 DNS

3、仓库管理

  • 仓库(Repository)是集中存放镜像的地方,前 Docker 官方维护了一个公共仓库 Docker Hub,大部分需求都可以通过在Docker Hub 中直接下载镜像来实现。
  • 在 https://hub.docker.com 免费注册一个 Docker 账号
    在这里插入图片描述
  • 登录和退出
    docker login:登录
    docker logout:退出
[root@ecs-24bf ~]# docker login
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: yytwy
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@ecs-24bf ~]# docker logout
Removing login credentials for https://index.docker.io/v1/
  • 搜索镜像与拉取镜像

docker search 镜像名:搜索镜像
docker pull 镜像名:拉取镜像

  • 推送镜像
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值