docekr配置 docker换源
1 2 3 4 5 6 7 8 9 #输入命令,创建daemon.json文件 vim /etc/docker/daemon.json #在编辑器中输入内容,并保存退出 { "registry-mirrors": ["https://nddt8zfh.mirror.aliyuncs.com"] } #输入命令,重启docker即可 systemctl daemon-reload systemctl restart docker
docker环境调试
1 2 3 4 5 6 7 version: '2' services: weblogic: image: vulhub/weblogic ports: - "7001:7001"#映射的端口docekr - "8453:8453"
继续
1 2 3 4 apt-get update apt-get install vim 使用docker exec -it e0 /bin/bash命令进入容器,对root/Oracle/Middleware/user_projects/domains/base_domain/bin/setDomainEnv.sh文件中,如下图处添加debugFlag="true"和export debugFlag两条内容
完成后使用命令使其内配置文件生效
镜像命令 推送镜像
1 docker commit -m='提交描述信息' -a='作者' containerID 目标镜像名:[tag]
1 2 3 4 5 6 7 8 9 10 11 12 root@ubuntu:/home/anz/vulhub-master/weblogic/CVE-2017-10271# docker ps -aq d315457cf985 root@ubuntu:/home/anz/vulhub-master/weblogic/CVE-2017-10271# docker commit -m='提交描述信息' -a='作者' d3 anztest sha256:88dead12e1e2f1647742dc7f507d45ab50e7c9d9754ad9ded98a4196841feea2 root@ubuntu:/home/anz/vulhub-master/weblogic/CVE-2017-10271# docker images REPOSITORY TAG IMAGE ID CREATED SIZE anztest latest 88dead12e1e2 5 seconds ago 231MB 445 latest de3ccd0622dc 19 hours ago 2.46GB centos latest 5d0da3dc9764 18 months ago 231MB vulhub/weblogic 10.3.6.0-2017 7d35c6cd3bcd 5 years ago 2.46GB
1 2 3 4 5 6 7 docker images #REPOSITORY TAG IMAGE ID CREATED SIZE #仓库 标签 镜像ID 创建时间 镜像大小 -a 显示全部镜像 -f 添加过滤器 -q 仅显示id
镜像搜索
1 2 3 4 docker search * 可选项,通过star来过滤 -f --filter STARS=3000
镜像下载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 docker pull mysql Using default tag: latest #不写tag,默认下载latest最新版 latest: Pulling from library/mysql a076a628af6f: Pull complete#分层下载 docker image核心联合文件系统 f6c208f3f991: Pull complete 88a9455a9165: Pull complete 406c9b8427c6: Pull complete Digest: sha256:0fd2898dc1c946b34dceaccc3b80d38b1049285c1dab70df7480de62265d6213 #签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest #真实地址 docker pull mysql docker pull docker.io/library/mysql:latest #等价 联合文件系统: 将一整个文件进行分块,已经存在的文件块就不再重复下载
镜像删除命令
1 2 3 4 5 6 7 8 docker rmi -f ID #删除指定镜像 docker rmi -f ID1 ID2 #删除多个镜像 docker rmi -f $(docker images -aq) #删除全部镜像
容器命令 有镜像才可以创建容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 docker run [可选参数] image #可选参数说明 --name='Name' 用来区分容器 -it 使用交互方式运行,需指定交互 shell # docker run -it centos /bin/bash -d 后台方式运行 -p 指定端口 -p ip:主机端口:容器端口 -p 主机端口:容器端口* -p 容器端口 指定容器端口,主机端口随机 -P 随即指定主机和容器端口 systemctl start docker systemctl stop docker docker version #显示docker版本信息 docker info #显示docker的系统信息,包括镜像和容器数量 docker 命令 --help docker-compose up -d docker-compose build 重新加载环境 docker-compose stop 停止但不删除创建的任何内容 docker-compose down 是停掉容器然后删除掉 docker ps:列出运行中的容器 docker ps #列出当前运行容器 -a #列出所有容器 正在运行+历史运行 -n=3 #只显示最近创建的3个容器 docker run -d centos #问题docker ps发现centos停止了 常见的坑:docker容器使用后台运行,就必须有一个前台进程,否则docker发现没有应用,会自动停止 比如:nginx 容器启动后,发现自己没有提供服务,就会立即停止 docker stop 容器id:停止容器 docker kill 容器id:强制停止进程中的容器 docker start 容器id:启动已停止的容器 #使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。 docker inspect 容器id docker stats查看cpu状态 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 9eb4ebb6c6a1 nginx01 0.00% 3.766MiB / 1.796GiB 0.20% 5.96kB / 8.25kB 3.32MB / 4.1kB 2 docker container logs 容器id:查看容器日志 docker logs #显示日志 -tf 显示日志 --tail number 要显示日志的条数 docker logs -tf --tail 10 containerID docker top 容器id:查看容器里的进程 docker cp 容器id:/root ./目标文件夹/weblogic_jars #复制文件到主机 docker exec -it 容器id /bin/bash:进入容器 exit:退出容器 docker rm 容器ID #删除指定容器,不能删除正在运行容器 加-f强制删除 docker rm -f ID1 ID2 #删除多个容器 docker rm -f $(docker ps -aq) docker ps -a -q|xargs docker rm #删除全部容器
数据卷操作 类似于一个本地云备份,可以实现本地与docker共享数据,数据卷的生命周期一直持续到没有容器使用为止,一旦持久化到本地,本地数据不会删除
1 2 3 docker volume create edc-nginx-vol // 创建一个自定义容器卷 docker volume ls #查看所有容器卷 docker volume inspect 卷名 #查看指定容器卷详情信息
1 2 3 4 5 6 7 8 9 10 11 12 13 docker run -it -v 主机目录:docker目录 #数据卷挂载 #docker inspect 容器id 查看挂在情况 # "Mounts": [ { "Type": "bind", "Source": "/root/test", #主机内地址 "Destination": "/home", #docker地址 "Mode": "", "RW": true, "Propagation": "rprivate" } ]
比如安装mysql,连接本地的2444端口mysql
1 2 3 4 5 6 7 docker run -d -p 2444:3306 -v /root/test/conf:/etc/mysql/conf.d -v /root/test/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql -d 后台运行 down -p 指定端口 port -e 环境配置 environment -v 卷挂载 volume --name 容器名
如果 mysql 容器被删除,因为是同步的所以本地数据依然存在
1 2 3 4 5 6 7 8 9 10 11 12 匿名 docker run -d -v /etc --name anouy centos b0d9271dd4b0f271facac5a622ef1cf7e46d965d1de29e8a3792dd62e735b0be #-v 加了一个值,代表容器内目录,没有写容器外目录 docker volume ls DRIVER VOLUME NAME local 0b92ae7f6a7ec6348a49752db76ace42ec4a465f74cda6222124d01d1c6ef909 root@ubuntu:/home/anz/vulhub-master/weblogic/CVE-2017-10271# ls /var/lib/docker/volumes 0b92ae7f6a7ec6348a49752db76ace42ec4a465f74cda6222124d01d1c6ef909 backingFsBlockDev dockertest metadata.db #所有docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxx/_data
具名
1 docker run -d -v detailed-centos:/etc --name detailed-centos centos
挂载权限操作
1 2 3 4 5 6 通过 -v 容器内路径:ro rw更改读写权限 ro readonly 只读 rw readwrite 可读可写 #设置权限后,容器挂载出来就有限制了 ro 容器内部无法操作,只能宿主机操作
1 2 3 4 5 6 --volumes-from 容器ID docker run --volumes-from cc4ba081cb71 -it centos #去会继承 cc4ba081cb71 的卷,他们的卷之间是共享同步的 #如果删除 cc4ba081cb71 不影响继承的子 #此时 cc4ba081cb71 就叫数据卷容器
创建镜像时挂载可以使用dockerfile ,还可以手动-v挂载镜像
dockerfile编写 可以通过编写dockerfile文件来创建一个docker镜像
通识
1 2 3 4 5 6 7 8 9 10 11 12 13 14 FROM 指定基础镜像 MAINTAINER 指定维护者 RUN 镜像构建时需要运行的命令,会在docker build时运行 ADD 具体步骤,add指令和copy指令格式一致 WORKDIR 镜像的工作目录 VOLUME 挂载的目录 EXPOSE 保留端口位置 CMD 指定容器启动时要运行的命令,但是只有最后一个会生效,在docker run时运行 ENTRYPOINT 指定容器启动时要运行的命令,会直接追加命令 COPY 类似于ADD,把文件拷贝到镜像中 COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"] ONBUILD 该dockerfile文件被当作某个镜像的构建基础时触发 ENV 设置环境变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 dockerfile: FROM centos CDM ["ls","-a"] #ls -a会被整体替换 [root@izbp1i7e0dqxcb89vkdgc3z test]# docker run 358b9081be07 -l docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "-l": executable file not found in $PATH: unknown. [root@izbp1i7e0dqxcb89vkdgc3z test]# docker run 358b9081be07 ls -l total 48 lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin drwxr-xr-x 5 root root 340 Jan 17 08:07 dev drwxr-xr-x 1 root root 4096 Jan 17 08:07 etc drwxr-xr-x 2 root root 4096 Nov 3 15:22 home lrwxrwxrwx 1 root root 7 Nov 3 15:22 lib -> usr/lib lrwxrwxrwx 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64 drwx------ 2 root root 4096 Dec 4 17:37 lost+found drwxr-xr-x 2 root root 4096 Nov 3 15:22 media
举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 FROM centos VOLUME ["volume1","volume2"] MAINTAINER anz ENV MYPATH /usr/local WORKDIR $MYPATH #默认工作目录是 根目录 RUN yum -y install vim EXPOSE 80 CMD echo $MYPATH CMD /bin/bash
1 2 3 4 5 docker build -f ./dockerfile -t centos:dockerfile . -t 指定要构建的镜像名称和标签 . 指定构建上下文路径,Docker将在当前目录查找构建所需要文件 docker history images -id 查看安装过程
docker网络 每启动一个Docker容器,docker就会给一个容器分配一个ip,我们只要安装了docker,就会有个网卡docker0桥接模式,它使用的是evth-pair技术
evth-pair技术就是一对虚拟设备接口,成对出现,一端连着协议,一端彼此相连充当一个桥梁,连接虚拟网络
这样物理机和容器,容器和容器都可以互相ping通
1 2 3 4 5 [root@izbp1i7e0dqxcb89vkdgc3z ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 36e3dbde727f bridge bridge local a4be1eae4e1a host host local bdf237354def none null local
有四种基本配置:
bridge桥接docker默认
none不配置网络
host和宿主机共享网络
container 容器网络联通
-link
就是在hosts配置中增加一个ip containerID
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@9559c91ca761 /]# ping centos03 ping: centos03: Name or service not known //在centos02中不能直接pingcentos03 root@xiaoni-01:~# docker run -dit -P --name centos04 --link centos03 centos:7 //进行连接 581451397c27245af4152c7c27f96bc5bf15c097629c424f7fccbe1d9de922ac root@xiaoni-01:~# docker exec -it 581451397c272 ping centos03 //直接ping PING centos03 (172.17.0.2) 56(84) bytes of data. 64 bytes from centos03 (172.17.0.2): icmp_seq=1 ttl=64 time=0.076 ms 64 bytes from centos03 (172.17.0.2): icmp_seq=2 ttl=64 time=0.056 ms 64 bytes from centos03 (172.17.0.2): icmp_seq=3 ttl=64 time=0.063 ms 64 bytes from centos03 (172.17.0.2): icmp_seq=4 ttl=64 time=0.067 ms 64 bytes from centos03 (172.17.0.2): icmp_seq=5 ttl=64 time=0.058 ms 64 bytes from centos03 (172.17.0.2): icmp_seq=6 ttl=64 time=0.050 ms 64 bytes from centos03 (172.17.0.2): icmp_seq=7 ttl=64 time=0.057 ms
docker network create
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 root@ubuntu:/home/anz/vulhub-master/weblogic/CVE-2017-10271# docker network ls NETWORK ID NAME DRIVER SCOPE 7ef9de74f024 apache_parsing_vulnerability_default bridge local 825caa6e1421 bridge bridge local e24100408c9c host host local e24244137196 none null local root@ubuntu:/home/anz/vulhub-master/weblogic/CVE-2017-10271# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 anznet ce79bc46bd85274027d5f1bd02376c8b8a926e18a29b3bafbb1be360b44ce007 root@ubuntu:/home/anz/vulhub-master/weblogic/CVE-2017-10271# docker network ls NETWORK ID NAME DRIVER SCOPE ce79bc46bd85 anznet bridge local 7ef9de74f024 apache_parsing_vulnerability_default bridge local 825caa6e1421 bridge bridge local e24100408c9c host host local e24244137196 none null local root@ubuntu:/home/anz/vulhub-master/weblogic/CVE-2017-10271# docker network inspect anznet [ { "Name": "anznet", "Id": "ce79bc46bd85274027d5f1bd02376c8b8a926e18a29b3bafbb1be360b44ce007", "Created": "2023-04-06T03:45:00.091772282-07:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.0.0/16", "Gateway": "192.168.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ]
1 docker exec -it 容器id cat /etc/hosts
容器加入自定义网络
1 2 3 docker run -d -P --name 容器指定名字 --net 指定自定义网络 指定使用的镜像 docker run -d -P --name centos1 --net anznet centos # run启动时不加 net 参数,默认值就是 bridge