最近在进行服务器批量操作时学习的一点docker的内容,在此记录下来防止以后遇到时方便查找学习,记录内容并不是很详细,没有详细的参数介绍等内容,需要用到的可以使用man查看或者docker help查看
下载docker离线包:https://yum.dockerproject.org/repo/main/centos/7/Packages/;
docker官方网站下载镜像 https://hub.docker.com/;https://hub.daocloud.io/;
一、docker基本命令:
创建docker镜像:
docker build -t="ubuntu:v1" . 创建docker镜像
运行容器:
docker run -it --rm --name mycon ubuntu:v1 退出容器后删除容器
后台运行 docker run -itd--name mycon ubuntu:v1
容器退出:
exit
后台执行容器:
ctrl + P + Q
查看正在运行的容器:
docker ps -a
多窗口进入容器:
docker exec -it mycon(CONTAINER ID) /bin/bash
容器停止:
docker stop mycon(CONTAINER ID)
容器恢复:
docker restart mycon(CONTAINER ID)
重新进入容器:
docker -it attach mycon(CONTAINER ID)
容器/镜像删除:
docker rm/rmi -f(强制) mycon(CONTAINER ID)
从宿主机器拷贝内容到容器:
docker cp path/file mycon:path, 反之互换
修改docker的mtu大小:
vi /usr/lib/systemd/system/docker.service,在启动项中加入-mtu=1600后,执行
systemctl daemon-reload,重启docker服务,只有启动容器后宿主上的docker0的mtu才会变化,没有容器启动时docker0的mtu不变
镜像/容器打包:
打包:docker save -o image.tar 镜像名
导入:docker load --input image.tar 或者 docker load < image.tar
给容器的网卡修改ip,则需要给这个网络指定一个subnet(制定网桥)
因为容器ip只有在私有网桥上才能支持修改
创建网桥并指定子网络:
docker network create --driver bridge --subnet 192.168.0.0/24 subinet
创建网桥并自定义网桥名字:
docker network create -o "com.docker.network.bridge.name"="subinet" --subnet 192.168.0.0/24 subinet
运行容器时指定容器ip
docker run --rm -it --net subinet --ip 192.168.0.10 --name mycon ubuntu:v1
docker镜像信息查看:
/var/lib/docker目录下存放着跟镜像有关的信息(也是pull 镜像后的保存路径),能够看到完整的sha256
关于docker0网卡:
docker每启用一个容器会出现一个网卡,所有网卡的流量都会到doker0上,docker0相当于一个网关,所有容器中的数据都会到该网卡到达操作系统然后发到网络中
二、私有仓库配置
仓库使用说明文档https://docs.docker.com/registry/
服务端仓库创建
docker run -d -v /mnt/registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name registry registry:v1
/mnt/registry:/var/lib/registry:挂载路径
--privileged=true:放开权限
registry:v1:仓库的镜像名字
registry:仓库的容器名字
registry启动时会连接网络获取数据,所以在网络隔离的环境下,使用docker save在一台互联网机器上将registery镜像打包,然后将打包文件发到目标机器上使用docker load导入镜像
联网环境下直接使用docker push register下载仓库镜像
客户端配置:
1.在/etc/default下创建docker文件,添加 DOCKER_OPTS="--insecure-registry 10.127.160.24:5000"
[root]# vim /etc/default/docker
DOCKER_OPTS="--insecure-registry 121.34.234.22:5000" #镜像服务器的ip
ADD_REGISTRY="--add_registry 121.34.234.22:5000"
add_registry选项可在pull/push镜像时不用使用tag修改镜像名字,默认到私有仓库下载,详情查看tag命令
2.在/usr/lib/systemd/system/docker.service中添加和修改红框中标出的内容
[root]# vim /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documnetation=https://docs.docer.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
EnvironmnetFile=/etc/default/docker
ExecStart=/usr/bin/docker/ daemon -H fd:// $DOKCER_OPTS
......
[Install]
......
或者在/etc/docker/daemon.json文件中添加如下内容,使用该文件则不用进行第一步的操作,若该文件没有就自己创建一个
{
"--insecure-registry": ["121.34.234.22:5000"] #镜像服务器的ip
"--add_registry": ["121.34.234.22:5000"]
}
3.执行systemctl daemon-reload;service docker restart
4.使用tag命令修改容器名字
docker tag ubuntu:v2 localhost:5000/my-image ,localhost:私有仓库的ip地址(121.34.234.22)
5.使用push命令上传镜像
docker push localhost:5000/my-ubuntu
6.使用pull命令下拉镜像
docker pull localhost:5000/my-ubuntu
注:如果服务端ip为192.168.0.123则localhost即为192.168.0.123
由于建立的私有仓库没有直观的方式进行管理,目前只是使用了curl来查看私有仓库中的镜像,没有尝试过仓库中镜像的删除测试,按照该方法创建的仓库只能使用push上传进行,不能删除镜像
三、仓库维护
查看镜像的方法:这里也只是提供一个连接,如有需要的可以打开连接自行学习
curl -XGET http://10.127.160.24:5000/v2/_catalog
仓库管理参考:https://www.imooc.com/article/68976;
工具下载:https://github.com/burnettk/delete-docker-registry-image;
四、参考内容:
https://blog.csdn.net/fgf00/article/details/52040492;