Docker

docker镜像制作
1、基于容器b1制作镜像
docker commit -a "huge<393151145@qq.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 lh438369/httpd:v0.1
-p:docker容器名为b1暂停 -c:修改容器启动项 -f:容器的应用程序让其工作到前台
docker images:查看docker镜像
docker tag imageID mageedu/httpd:v0.1-1 :增加标签
docker rmi mageedu/httpd:v0.1-1:删除docker镜像
2、基于dockerfile制作镜像

docker镜像pull push
docker login :输入docker hub的登录用户名和密码,前提要有docker hub的注册账号
docker push lh438369/httpd:v0.1 :上传镜像到docker hub,httpd的仓库名要和docker hub网站上创建的要一致
docker pull lh438369/httpd:v0.1 :下载镜像到本地

docker镜像打包和装载(方便其他主机能快速使用相关镜像,而非去docker hub上去拉取)
docker save -o myimages.gz mageedu/httpd:v0.1-1 mageedu/httpd:v0.1-2 #将多个镜像文件打包到压缩文件中,拷贝到对应的主机上
docker load -i myimages.gz #通过docker的装载自动导入镜像,免去了从镜像仓库中下载的问题

docker容器创建、启动停止删除
docker run -itd --name nginx-test nginx /bin/bash #基于nginx镜像创建容器,名字为nginx-test
-it:进入交互接口 -d:后台运行
docker run --name t1 -itd --network bridge -h t1.lihu.com --dns 114.114.114.114 --add-host www.lihu.com:10.1.1.1 --rm nginx /bin/bash
--rm :退出自动删除 --dns:设定dns -h:设置主机名 --network:设定网络类型 --add-host:自动注入host解析条目
docker inspect b1 :查看容器相关详细参数信息
docker ps -a :查看运行的所有容器
docker stop t1 或 docker container stop t1 :停止容器运行
docker rm t1 或 docker container rm t1 : 删除容器,删除前先停止容器运行
docker exec -it t1 /bin/sh :交互式进入容器

docker网络类型(bridge\none\host)
bridge:默认自动创建eth0
none:为封闭式容器
host:共享宿主机的网卡
docker run --name b2 --network container:b1 -it --rm prom/busybox /bin/sh 容器b2与b1的网卡共享 (wget -O - -q 127.0.0.1)
docker run --name b2 --network host -it --rm prom/busybox /bin/sh 容器共享宿主机的网卡

docker网络配置

1、yum install bridge-utils 安装查看网卡的工具brctl
2、brctl show 查看docker网卡
3、ip netns add r1 创建网络名称空间r1
4、ip netns list 查看网络名称空间
5、ip link add name veth1.1 type veth peer name veth1.2 创建两块虚拟网卡
6、ip link set dev veth1.2 netns r1 将veth1.2虚拟网卡绑定到绑定在r1网络名称空间中
7、ip netns exec r1 ip link set dev veth1.2 name eth0 进入到r1将veth1.2命名为eth0
8、ip netns exec r1 ifconfig eth0 10.1.0.2/24 up 进入到r1配置ip并up激活
9、ip netns exec r1 ifconfig 查看r1的网卡信息
10、ip netns exec r2 ping 10.1.0.3 进入r2 ping测试
11、docker run --name t1 -it --network bridge -h t1.lihu.com --dns 114.114.114.114 --add-host www.lihu.com:10.1.1.1 --rm nginx /bin/bash
--rm :退出交互式窗口自动删除 --dns:设定dns -h:设置主机名 --network:设定网络类型 --add-host:自动注入host解析条目
12、docker port myweb 查看容器的端口映射关系
13、修改默认docker的默认IP地址段和远程连接docker
$ sudo vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --bip=10.20.0.1/16
systemctl daemon-reload
systemctl restart docker.service

14、创建一个网卡,网络类型为bridge,网段为172.20.0.0/16
docker network create -d bridge --subnet "172.20.0.0/16" br2
docker network ls 查看docker的网卡
brctl show 查看网卡上的interface接口
ip link set br-2ab653cbdd81 down && ip link set br-2ab653cbdd81 name docker1 && ip link set docker1 down 修改网卡名称
docker network connect br2 b1 #环境是容器b2 b3的网络在br2的网桥上,b1在默认的bridge网桥上,想实现冗余b1与b2 b3互通,只需将网桥br2与b1连接起来,可以理解为:容器新增一个接口连到相应交换机上
docker exec -it b3 ping b1 #新增的docker网络可以直接通过容器来解析出IP进行ping测试

 

docker 存储卷的使用

docker run -it --name b1 --rm -v /data/volumes/b1:/data busybox /bin/sh #/data/volumes/b1:为宿主机的目录,没有此目录会自动创建,/data:为docker容器的目录
sudo docker run --name b2 --network container:b1 --volumes-from b1 -it --rm busybox /bin/sh 创建基础架构容器b1,b2共享b1的网络和存储卷
docker cp simkai.ttf zabbix-web-nginx-mysql:/usr/share/zabbix/assets/fonts 从宿主机拷贝文档到容器内
docker volume create 命令用于创建新卷。默认情况下,新卷创建使用 local 驱动,但是可以通过 -d 参数来指定不同的驱动。
docker volume ls 会列出本地 Docker 主机上的全部卷。
docker volume inspect 用于查看卷的详细信息。可以使用该命令查看卷在 Docker 主机文件系统中的具体位置。
docker volume prune 会删除未被容器或者服务副本使用的全部卷。
docker volume rm 删除未被使用的指定卷。

Dockerfile
Dockerfile是docker镜像构建及docker run两个过程的指令集合
RUN:是在docker build过程中运行,构建镜像时运行的指令(可以有多个)
CMD:是在docker run过程中运行,基于镜像运行为容器时指定默认要运行的程序(可以有多个但只有最后一个生效)
ENTRYPOINT:相比CMD,它指定的默认执行的命令不会被覆盖,CMD和ENTRYPOINT同时定义了,CMD的指令会当做参数传递给ENTRYPOINT,它才是正统地用于定义容器启动以后的执行体的
FROM:构建镜像基于哪个镜像
MAINTAINER:镜像维护者姓名或邮箱地址
VOLUME:指定容器挂载点到宿主机,只能指定容器内的路径,不能指定宿主机的路径,容器不存在目录可以自动创建
USER:为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR:为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,进入容器直接跳转到此目录
EXPOSE:声明容器的服务端口(仅仅是声明),需要在docker run时指定-P来真正暴露声明的端口
ENV:设置容器环境变量
ADD:拷贝文件或目录到容器中,如果是URL的压缩包便会自动下载但不会自动解压缩
COPY:拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能

例:
FROM busybox                                                                    -----基于哪个基础镜像
LABEL maintainer="huge<huge@qq.com>"                        -----定义镜像的作者
ENV Busydir="/tmp/" \                                                          -----定义环境变量,多个可以通过转译符换行隔开
        Yumrepo="yum.repos.d.tar.gz"
WORKDIR /etc/                                                                    -----定义工作目录,连入容器是模式默认进入了此目录
RUN echo "<h1>hello huge</h1>" >> $Busydir/index.html -----在docker build过程中运行,构建镜像时运行的指令
CMD /bin/httpd -f -h $Busydir                                              -----在docker run过程中指定默认要运行的程序
#CMD ["/bin/sh","-c","/bin/httpd -f -h ${Busydir}"]
ADD $Yumrepo ./                                                                 -----ADD相比COPY,拷贝压缩文件能自动解压,带URL的能自动下载后再拷贝,但不能自动解压
EXPOSE 80/tcp                                                                   -----声明默认要暴露的端口,需要在docker run时指定-P才能真正的暴露出去
VOLUME /data/h1                                                               -----定容器挂载点存储卷的目录,不能指定宿主机与之对应的目录,只能自动生成与之相对应的宿主机存储卷目录

posted @ 2022-06-02 16:08  Me-lihu  阅读(30)  评论(0编辑  收藏  举报