概述
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仓库镜像管理通过容器创造镜像容器管理数据管理网络管理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复