----------------------------------------------------------------------------- # 启动并进入容器 [root@localhost ~]# docker run -it centos /bin/bash [root@83089d026ece /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var # 从容器中退回主机 [root@83089d026ece /]# exit exit
UnionFs(联合文件系统):Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下( unite several directories into a single virtual filesystem)。Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
[root@localhost ~]# docker run -it centos [root@0fda862a6d76 /]# vim bash: vim: command not found [root@0fda862a6d76 /]# ifconfig bash: ifconfig: command not found
[root@localhost tomcat]# ls apache-tomcat-9.0.38.tar.gz Dockerfile jdk-8u281-linux-x64.tar.gz README.txt test tomcatlogs [root@localhost tomcat]# cd test [root@localhost test]# ls [root@localhost test]# pwd /home/build/tomcat/test [root@localhost test]# mkdir WEB-INF [root@localhost test]# ls WEB-INF [root@localhost test]# cd WEB-INF/ [root@localhost WEB-INF]# vim web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
</web-app> [root@localhost WEB-INF]# cd .. [root@localhost test]# ls WEB-INF [root@localhost test]# vim index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>hello,我的tomcat</title> </head> <body> Hello World!<br/> <% System.out.println("-----my test web logs-----"); %> </body> </html>
7、访问测试
1
http://192.168.132.3:8080/test/
发布镜像至DockerHub
登录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[root@localhost tomcat]# docker login --help
Usage: docker login [OPTIONS] [SERVER]
Log in to a Docker registry. If no server is specified, the default is defined by the daemon.
Options: -p, --password string Password --password-stdin Take the password from stdin -u, --username string Username [root@localhost tomcat]# docker login -u kimtou 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
docker push
1 2 3 4 5 6 7 8 9 10 11 12
[root@localhost tomcat]# docker push diytomcat Using default tag: latest The push refers to repository [docker.io/library/diytomcat] 0b5f6503d033: Preparing 1ca989e043c6: Preparing b0f9e083fd93: Preparing 13ab4cbc0c90: Preparing 2653d992f4ef: Preparing denied: requested access to the resource is denied # 拒绝(原因:本地没有tag信息) # 添加tag信息 [root@localhost tomcat]# docker tag a9181af1fc76(diytomcat镜像id) kimtou/tomcat:1.0 [root@localhost tomcat]# docker push kimtou/tomcat:1.0
Dokcer网络
理解docker0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# 查看内部网络地址 [root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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 state UP group default qlen 1000 link/ether 00:0c:29:8b:8f:c6 brd ff:ff:ff:ff:ff:ff # 虚拟机内网地址 inet 192.168.132.3/24 brd 192.168.132.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::b337:5b2f:b8aa:54f7/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:40:82:c8:42 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 # docker0地址 valid_lft forever preferred_lft forever
三个网卡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[root@localhost ~]# docker run -d -P --name tomcat01 tomcat:9.0 e07dc049270c66313c2fa9d0bc3f59af5656012377ece17c887226fb68097716 # 查看容器的内部网络地址(不想进去/bin/bash,,只想查看网络地址,所以直接可以写ip addr) [root@localhost ~]# docker exec -it tomcat01 ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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 4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever # 发现得到一个 eth0@if5 ip地址(docker分配的)
# 发现linux可以ping通容器内部 [root@localhost ~]# ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.295 ms
[root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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 state UP group default qlen 1000 link/ether 00:0c:29:8b:8f:c6 brd ff:ff:ff:ff:ff:ff inet 192.168.132.3/24 brd 192.168.132.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet6 fe80::b337:5b2f:b8aa:54f7/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:40:82:c8:42 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:40ff:fe82:c842/64 scope link valid_lft forever preferred_lft forever 5: veth2d24b84@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 26:e5:f5:40:f9:dc brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::24e5:f5ff:fe40:f9dc/64 scope link valid_lft forever preferred_lft forever # 多了 5: veth2d24b84@if4 ,这个正好对应容器的 4: eth0@if5
启动另一个容器ping容器,发现可以ping通
1 2 3 4 5
[root@localhost ~]# docker run -d -P --name tomcat02 tomcat:9.0 db1d55c1d4888f7d91fe08acd742b149080982f221c7273c1c258fc8564e4add [root@localhost ~]# docker exec -it tomcat02 ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.132 ms
自定义网络
查看所有docker网络
1 2 3 4 5
[root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 86c387d828ca bridge bridge local 804bff49826a host host local 6525353ed74f none null local
网络模式
bridge : 桥接模式(默认)
none : 不配置网络
host : 与宿主机(Linux服务器)共享网络
1 2 3
# 两者作用相同,使用docker0 docker run -d -P --name tomcat01 tomcat:9.0 docker run -d -P --name tomcat01 --net bridge tomcat:9.0
创建自定义网络
1 2 3 4 5 6 7 8 9 10 11 12
# --driver bridge # --subnet 192.168.0.0/16 192.168.0.2 ~ 192.168.255.255 # --gateway 192.168.0.1 # 创建自定义网络 [root@localhost ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 5e6793046451757d49b52b93be2d655dce9673b1b4abb72918de92b716d26654 [root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 86c387d828ca bridge bridge local 804bff49826a host host local 5e6793046451 mynet bridge local 6525353ed74f none null local
[root@localhost ~]# docker exec -it tomcat01 ping tomcat-net-01 ping: tomcat-net-01: Name or service not known
打通docker0与mynet
1 2 3 4 5 6 7 8 9 10 11 12 13 14
[root@localhost ~]# docker network --help
Usage: docker network COMMAND
Manage networks
Commands: connect Connect a container to a network # 连接一个容器到一个网络 create Create a network disconnect Disconnect a container from a network inspect Display detailed information on one or more networks ls List networks prune Remove all unused networks rm Remove one or more networks