我是靠谱客的博主 动听眼睛,最近开发中收集的这篇文章主要介绍DockerDocker介绍基础配置下载Docker仓库镜像管理通过容器创造镜像容器管理数据管理网络管理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Docker介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。和其它软件一样,docker也分为企业版和社区版,一般管理一些小应用,比如说我要将我的项目制成镜像,一般用社区版就行了。

Docker是有三部分组成,分别为镜像(Image)、容器(Container)和仓库(Repository)

基础配置

虚拟机centos,关闭防火墙和se

下载Docker

#Docker 镜像源
wget -O /etc/yum.repos.d/doker.repo https://download.docker.com/linux/centos/docker-ce.repo
#下载docker
yum install docker-ce -y 
#启动docker
systemctl start docker  
#开机自启
systemctl enable docker  
#查看docker是否安装完成
[root@docker ~]# docker ps
CONTAINER ID  IMAGE   COMMAND  CREATED  STATUS   PORTS   NAMES

仓库镜像管理

注册 dockerhub:https:hub.docker.com

#把镜像推送到账号下面:
docker login docker.in
输入:ID
输入:密码

#搜索镜像nginx
docker search nginx
#搜索系统alpine
docker search alpine

#下载nginx镜像
[root@docker ~]# docker pull nginx
#下载系统alpine
[root@docker ~]# docker pull alpine:3.12.3
#查看有多少镜像
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    c316d5a335a5   22 hours ago    142MB
alpine       latest    c059bfaa849c   2 months ago    5.59MB
alpine       3.12.3    389fef711851   13 months ago   5.58MB

镜像打标签推送到注册的库中(可能出问题)

[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    c316d5a335a5   22 hours ago    142MB
alpine       latest    c059bfaa849c   2 months ago    5.59MB
alpine       3.12.3    389fef711851   13 months ago   5.58MB
#打标签
[root@docker ~]# docker tag 389fef711851 docker.io/xmfreexm/alpine:v3.12.3
#打完标签的样子
[root@docker ~]# docker images
REPOSITORY       TAG       IMAGE ID       CREATED         SIZE
nginx            latest    c316d5a335a5   22 hours ago    142MB
alpine           latest    c059bfaa849c   2 months ago    5.59MB
alpine           3.12.3    389fef711851   13 months ago   5.58MB
xmfree/alppine   v3.12.3   389fef711851   13 months ago   5.58MB
#删除标签    删除两个的时候需要-f
[root@docker ~]# docker rmi -f 389fef711851

#推送到库里    需要docker login docker.io
[root@docker ~]# docker push docker.io/xmfreexm/alppine:v3.12.3
#会报这样的错
The push refers to repository [docker.io/xmfreexm/alpine]
777b2c648970: Layer already exists 
errors:
denied: requested access to the resource is denied

如果有问题用下面的方法

#docker tag 需要上传的镜像[:TAG] [docker hub自己注册的账号名]/镜像名[:TAG]
[root@docker ~]# docker tag c316d5a335a5 nicehuahua/nginx:77
[root@docker ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
nginx              latest    c316d5a335a5   23 hours ago    142MB
nicehuahua/nginx   77        c316d5a335a5   23 hours ago    142MB
alpine             latest    c059bfaa849c   2 months ago    5.59MB
alpine             3.12.3    389fef711851   13 months ago   5.58MB
#推送成功
[root@docker ~]# docker push docker.io/nicehuahua/nginx:77
The push refers to repository [docker.io/nicehuahua/nginx]
762b147902c0: Mounted from library/nginx 
235e04e3592a: Mounted from library/nginx 
6173b6fa63db: Mounted from library/nginx 
9a94c4a55fe4: Mounted from library/nginx 
9a3a6af98e18: Mounted from library/nginx 
7d0ebbe3f5d2: Mounted from library/nginx 
77: digest:sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee size: 1570

通过容器创造镜像

[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    c316d5a335a5   23 hours ago   142MB
alpine       latest    c059bfaa849c   2 months ago   5.59MB
#启动nginx
[root@docker ~]# docker run -ti --name nginx -d nginx 
d06d433801f78c1943695360116d86cb39b762102c45a1af37ca5ef898a273cf
#查看容器是否启动
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
d06d433801f7   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 3 seconds   80/tcp    nginx

#通过容器创建镜像    -a:提交的作者    -m:提交时的注释
[root@docker ~]# docker commit -a "cool" -m "this is test" d06d433801f7 nginx1.0
sha256:c00839526b2336b7ece201f4782c1d314ad1bfb26adb140d9356d104b635d124
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx1.0     latest    c00839526b23   2 minutes ago   142MB        //这个就是
nginx        latest    c316d5a335a5   23 hours ago    142MB
alpine       latest    c059bfaa849c   2 months ago    5.59MB

容器管理

[root@docker ~]# docker run -dti --name nginx1.0 -p 80:80 nginx
862b43b2da6e744b8514ca1eee5a96651da35b0299a8952a4940e280f8220080
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
862b43b2da6e   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 5 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx1.0
d06d433801f7   nginx     "/docker-entrypoint.…"   9 minutes ago   Up 9 minutes   80/tcp                              nginx
[root@docker ~]# netstat -an |grep ":80"
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp6       0      0 :::80                   :::*                    LISTEN
去访问自己的IP:80端口会发现nginx页面!!!这是把nginx映射到了80端口。

#停止 06d433801f7 容器
[root@docker ~]# docker stop 862b43b2da6e
#启动
[root@docker ~]# docker start 862b43b2da6e

#进入容器
[root@docker ~]# docker exec -it 862b43b2da6e /bin/sh
# ls
bin   docker-entrypoint.d   home   media  proc    sbin  tmp
boot  docker-entrypoint.sh  lib    mnt      root    srv   usr
dev   etc            lib64  opt      run    sys   var
# exit    //退出容器

#导出容器    可以看出容器快照是在root目录下
[root@docker ~]# docker export 862b43b2da6e > ngixn1.0.tar
[root@docker ~]# ls
anaconda-ks.cfg  ngixn1.0.tar  
#删除容器
[root@docker ~]# docker rm -f 862b43b2da6e
#把容器快照导入镜像    开启即可
[root@docker ~]# cat ngixn1.0.tar |docker import - nginx1:1.0.1
sha256:f3df3c13c02e3a9004e06241c17e31c991642779df3d80d1920dfabe63990def
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx1       1.0.1     f3df3c13c02e   7 seconds ago   140MB        //这个就是
nginx1.0     latest    c00839526b23   4 hours ago     142MB
nginx        latest    c316d5a335a5   27 hours ago    142MB
alpine       latest    c059bfaa849c   2 months ago    5.59MB

数据管理

数据卷

数据卷:数据卷就是将宿主的某个目录,映射到容器中,作为数据储存的目录,我们就可以在宿主机对数据进行储存

#创建数据卷目录,在这个目录里添加一个文件文件里写了test
[root@docker ~]# mkdir /data
[root@docker ~]# echo "test" > /data/test.txt
#启动容器,挂载数据卷
[root@docker ~]# docker run -dti --name test1 -v /data:/data nginx
eee768c020059bca4cea711b027185a092f4f9a985157a1025f7152b384cef70
[root@docker ~]# docker ps
eee768c02005   nginx     "/docker-entrypoint.…"   16 seconds ago   Up 15 seconds   80/tcp
#进入容器内
[root@docker ~]# docker exec -it eee768c02005 /bin/bash
root@eee768c02005:/# ls /data
test.txt
root@eee768c02005:/# cat /data/test.txt 
test

数据卷容器
数据卷容器:数据卷容器需要再多个容器之间共享一些持续更新的数据,最简单的方式就是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷提供其他容器挂载

#创建数据卷容器v-data1 
[root@docker ~]# docker create -v /data1 --name v-data1 nginx
#创建两个容器        //意思是:v01容器通过挂载v-data1容器中创建数据卷来实现共享
[root@docker ~]# docker run --volumes-from v-data1 -dti --name v01 nginx
ba2f9e932d0afca7c0c38fe88f88884c91761d234e034565fe15a72eb00e0de4
[root@docker ~]# docker run --volumes-from v-data1 -dti --name v02 nginx
a6d153fa47104e846079f2b40f0056a6f156a51a853a7b328ea6a4ae998a1868

#进入v01容器    可以看root,录下是有data1共享文件夹的
[root@docker ~]# docker exec -ti ba2f9e932d0a /bin/bash
root@ba2f9e932d0a:/# ls
bin    dev             etc   lib64  opt    run   sys  var
boot   docker-entrypoint.d   home  media  proc    sbin  tmp
data1  docker-entrypoint.sh  lib   mnt      root    srv   usr    //这不data1文件
root@ba2f9e932d0a:/# echo "aihuahua" > /data1/gm.txt    //#创建一个带有内容的文件、去v02看看有没有
root@ba2f9e932d0a:/# exit    //退出
[root@docker ~]# docker exec -it a6d153fa4710 /bin/bash        //进入v02容器
root@a6d153fa4710:/# cat /data1/gm.txt        //查看是有v01留下的内容
aihuahua

网络管理

  • brige模式
  • host模式
  • none模式
  • 自定义模式

brige模式

他是docker默认的网络模式,不写 --net 参数,就是 brige 模式。使用 docker run -p 时,docker实际是在 iptables 做了 DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnl查看。也就是网桥模式

#创建有网络的容器    不加 --network 默认是网桥模式不加也行
[root@docker ~]# docker run -it --network bridge busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
5cc84ad355aa: Pull complete 
Digest: sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678
Status: Downloaded newer image for busybox:latest
/ #ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:06 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.6/16 brd 172.17.255.255 scope global eth0        //可以看到已经自己分配了IP
       valid_lft forever preferred_lft forever
/ # exit
[root@docker ~]# ifconfig        //可以看到跟 docker0 是在一个段上
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:ff:fe78:1aee  prefixlen 64  scopeid 0x20<link>
        ether 02:42:00:78:1a:ee  txqueuelen 0  (Ethernet)
        RX packets 15  bytes 2175 (2.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22  bytes 2242 (2.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

host模式

host 模式:使用 host 模式的容器可以直接使用宿主机的IP与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host 最大的优势就是网络性能比较好,但是 docker host上已经使用的端口就不能再用了,网络的隔离性不好

#创建host模式的容器     可以看到跟宿主机的ip一样,也就说明他没有自己的ip网卡
[root@docker ~]# docker run -it --network host busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:a7:01:5c brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.111/24 brd 192.168.100.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::6c54:c9c3:84ae:8548/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
    link/ether 02:42:00:78:1a:ee brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:ff:fe78:1aee/64 scope link 
       valid_lft forever preferred_lft forever
7: veth49cbf4c@if6: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 
    link/ether be:a0:f7:bf:d7:62 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::bca0:f7ff:febf:d762/64 scope link 
       valid_lft forever preferred_lft forever
11: veth9ccc5e3@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 
    link/ether 8e:71:bb:61:9f:d5 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::8c71:bbff:fe61:9fd5/64 scope link 
       valid_lft forever preferred_lft forever
13: veth6801f79@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 
    link/ether 0a:c1:28:80:c8:1d brd ff:ff:ff:ff:ff:ff
    inet6 fe80::8c1:28ff:fe80:c81d/64 scope link 
       valid_lft forever preferred_lft forever
15: veth43f383c@if14: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 
    link/ether f2:8b:68:93:ac:84 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::f08b:68ff:fe93:ac84/64 scope link 
       valid_lft forever preferred_lft forever

none模式

1.使用none模式,Docker容器拥有自己的NAwork Namespace,但是,并不 为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、iP、 路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

2.这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器 创建时通过–network=none来指定。这种类型的网络没有办法联网,封闭的 网络能很好的保证容器的安全性。

#创建 none 网络
[root@docker ~]# docker run -it --network none busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
/ #

如果有一个容器是生产随机密码那么 none 模式是最安全的

自定义网络模式

系统默认的IP地址段自动向后递增

#创建一个名字为 my_net 的自定义网卡
[root@docker ~]# docker network create --driver bridge my_net
1d25cd338fb08156a729812a7eeb16e6d69cc66c0a0e418c92aeda9659fffa59
[root@docker ~]# ifconfig
br-1d25cd338fb0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:1c:57:9f:6f  txqueuelen 0  (Ethernet)
        RX packets 15  bytes 2385 (2.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 25  bytes 2452 (2.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#创建一个自定义网络的容器    //仔细观察IP地址是2了
[root@docker ~]# docker run --network my_net -it busybox
/ # ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ #

最后

以上就是动听眼睛为你收集整理的DockerDocker介绍基础配置下载Docker仓库镜像管理通过容器创造镜像容器管理数据管理网络管理的全部内容,希望文章能够帮你解决DockerDocker介绍基础配置下载Docker仓库镜像管理通过容器创造镜像容器管理数据管理网络管理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部