CentOS 7安装配置docker

CentOS 7、8安装、配置docker

这里宿主机的型号选择是centos7.9.2009的版本

1.宿主机关闭防火墙和selinux,配置ipv4

#设置SELinux=disabled
vim /etc/selinux/config
SELinux=disabled
查看防火墙状态:firewall-cmd --state
关闭防火墙:systemctl stop firewalld
卸载防火墙:systemctl disable firewalld
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

image-20230202180627592

重启网络:systemctl restart network && systemctl restart docker
sysctl net.ipv4.ip_forward

2. 卸载旧版本的docker

如果之前安装过docker的话需要卸载
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

3.yum安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
如果下载的repo文件不管用,执行:
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo --no-check-certificate
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
yum -y install docker-ce(默认安装的20.10)

4.离线安装docker(二进制安装)

如果无法使用yum源来安装docker的话,那么就必须离线使用tar包进行安装。
下载docker-20.10.7.tgz包,使用wget或者直接下载好,然后上传服务器
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/docker-20.10.7.tgz 
安装以后会报错

image-20230202181205428

解决:使用无证书检测:yum install -y ca-certificates
再次执行安装便可成功。

image-20230202181320773

解压安装包
tar xvf docker-20.10.7.tgz

image-20230206132037483

解压出来这些命令可以使用:./docker/docker version
image-20230206132054646
解压出来的这些都是命令,为了保证普通用户也可以执行,将命令放到/usr/bin里
cp docker/* /usr/bin/
创建三个service文:docker.service、dokcer.socket、containerd.service
这三个文件如果是通过yum来安装的话,那么会自动生成,如果是通过二进制tar包来安装的话,这些文件不存在需要手动创建,或者是通过之前yum安装的服务器来拷贝进去。这里使用手动创建
vim /lib/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target
启动:systemctl enable containerd &systemctl start containerd &systemctl status containerd
增加docker组,否则docker无法启动:groupadd docker

vim /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity

# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes

# kill only the docker process, not all processes in the cgroup
KillMode=process
OOMScoreAdjust=-500

[Install]
WantedBy=multi-user.target
启动:systemctl enable docker.service &systemctl start docker.service &systemctl status docker.service

vim /lib/systemd/system/docker.socke
[Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target

systemctl enable docker.socket &systemctl start docker.socket &systemctl status docker.socket

systemctl restart docker

docker info 
docker version

5.安装并且启动docker

配置完成镜像源,开始安装docker,这里安装的最新版的docker
yum install -y docker-ce
启动docker:
systemcetl start docker
自启动docker:
systemctl enable docker
查看docker的版本:
docker version
查看docker的基本信息:
docker info
查看docker当前的运行状态
systemctl status docker

6.docker拉取镜像

使用docker拉取centos7.9.2009系统作为我们镜像的系统:
docker pull centos:centos7.9.2009

查看docker拉取的镜像:
docker images

查看docker开启了哪些容器:
docker ps -a

7.运行docker容器

将拉取的centos7.9.2009的镜像启动,将其作为一个容器
docker run -itd --privileged -p 2222:22 -p 80:81 -p 260:443 -p 261:3306 -p 262:3307 -p 6369:6379 -v /sys/fs/cgroup:/sys/fs/cgroup --name keshihua xingyuyu123/hzky:keshihua  /usr/sbin/init

启动api:
docker run -itd --privileged -p 2222:22 -p 80:80 -p 2181:2181 -p 9092:9092 -p 8983:8983 -p 8080:8080 -v /sys/fs/cgroup:/sys/fs/cgroup --name api centos:centos7.9.2009  /usr/sbin/init

启动容器时,映射cgroup内核限制资源目录,即-v /sys/fs/cgroup:/sys/fs/cgroup,否则mysql起不来(如果有需要安装mysql需要这个,为了方便直接加上不影响)
前面的端口是宿主机的端口,指的是宿主机的端口映射到容器中端口是多少

-p 2222:22:增加端口映射,前面的映射到宿主机的端口,后面的22是容器内部真正的端口,以此类推
--name:api,是自定义的名字,centos:centos7.9.2009这个是拉取镜像的名称和对应的版本号

如果执行上述命令,提示如下错误:
WARNING: IPv4 forwarding is disabled. Networking will not work.

vim /etc/sysctl.conf
添加一条:net.ipv4.ip_forward=1
#重启network服务
systemctl restart network && systemctl restart docker
#查看是否修改成功 (备注:返回1,就是成功)
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
删除重新创建容器
启动容器以后,可以通过iptables来查看当前的规则
iptables -t nat -vnL
结果如下:
tcp dpt:2222 to:172.17.0.2:22 前面的是宿主机的端口,后面的是容器的端口

8.通过xshell等终端工具连接docker容器

启动docker,进入docker容器,如果是守护态容器,可以通过下面的方式进入:
先查看当前运行的容器状态,获取当前运行容器的CONTAINER ID
[root@centos7 ~]#docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

进入容器
[root@centos7 ~]#docker exec -it CONTAINER ID/name /bin/bash  #这里的CONTAINER ID对应的就是容器的id或者可以用给他启的名字name来启动

使用passwd密码来修改密码(如提示没有这个命令行使用yum install passwd安装)
passwd
xxx密码
xxx确认密码
这里设置的密码是:root


安装Openssh(docker 容器中执行)
安装ssh: yum -y install openssh-server
安装openssh-clients:yum -y install openssh-clients

修改SSH配置文件以下选项,去掉#注释,将四个选项启用:
vi /etc/ssh/sshd_config 如果下方没有的,就在最后面添加项
RSAAuthentication yes #启用 RSA 认证(这个没有需要添加)
PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile      .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)
PermitRootLogin yes #root能使用ssh登录


重启ssh服务,并设置开机启动:
安装server:yum install initscripts -y
service sshd restart
或者
systemctl restart sshd
systemctl enable sshd.service
退出容器并保存更改
使用exit命令或者ctrl+C来退出当前运行的容器:
此时使用xshell连接docker容器
ip: 为宿主主机的ip,而不是docker容器的ip
端口号:2222 
用户名: root
密码: 上面password部分设置的密码 centos7web

一定要关闭容器的防火墙或者防火墙透出端口,否则外界无法连通容器的端口
yum -y install firewalld
yum -y install net-tools
查看当前防火墙的状态: firewall-cmd --state
如果是running的话,那么首先关闭防火墙
systemctl stop firewalld
关闭防火墙以后,确认防火墙是否是自启动
systemctl is-enabled firewalld
enabled表示是自启动,那么将防火墙卸载,关闭自启动
systemctl disable firewalld
同理,宿主机也要卸载防火墙

9.docker修改时区

1、	查看当前时区:timedatectl
[root@centos7 ~]#timedatectl 
      Local time: 一 2023-02-06 14:09:20 CST
  Universal time: 一 2023-02-06 06:09:20 UTC
        RTC time: 一 2023-02-06 06:09:20
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
[root@centos7 ~]

注意:系统时区是通过符号链接 /etc/localtime 到目录中的二进制时区标识符来 配置的/usr/share/zoneinfo 。ls检查时区的另一个选项是使用以下命令显示符号链接指向的路径 :
ls -l /etc/localtime

2. 在 CentOS 中更改时区 
在更改时区之前,您需要找出要使用的时区的长名称。时区使用“地区/城市”格式。要列出所有可用时区,请使用以下选项调用 timedatectl 命令 :
timedatectl list-timezones
修改时区 sudo timedatectl set-timezone "Asia/Shanghai"
查看当前时间、时区
date -R
timedatectl

执行完成后再运行timedatectl命令查看即可【记得重启后-docker同步才会生效】
reboot

10.增加tab代码提示

#安装Linux命令补全工具
yum -y install bash-completion
#执行bash或者reboot重启系统
bash
#如果上述的命令执行了有问题可以执行功能下面的命令
yum install epel-release -y
yum install bash-completion bash-completion-extras -y

#Ubuntu也可以进行命令补全
apt install -y bash-completion

11.增加端口映射

方法一:修改配置文件

问题:如果在创建容器的时候,没加上固定的映射端口,怎么能重新加呢?
这里有两种解决方式
方法一:修改配置文件
先这个容器停掉,然后再停止docker,最后找到容器配置端口的文件,增加端口就可以了,然后重新启动即可.
1.	查看当前有哪个docker容器正在运行当中 docker ps
 
2.	停止该容器 docker stop web或者docker stop 10dc410fb6d4
停止docker服务:
systemctl stop docker.socket
systemctl stop docker.service
systemctl stop container.service
systemctl stop docker

3.	进入到docker容器的目录,找到对应编号的容器目录
cd /var/lib/docker/containers/
找到对应容器的id,cd,docker ps 显示的container id是选取了一部分,真正的container id很长
需要修改config.v2.json和hostconfig.json这两个文件
1.config.v2.json
将文件的内容通过json工具格式化一下就看的清楚了
在” ExposedPorts”下添加容器内部自己的端口
"8080/tcp": {}

{
  "StreamConfig": {},
  "State": {
    "Running": true,
    "Paused": false,
    "Restarting": false,
    "OOMKilled": false,
    "RemovalInProgress": false,
    "Dead": false,
    "Pid": 3553,
    "ExitCode": 0,
    "Error": "",
    "StartedAt": "2023-02-06T06:24:09.173425372Z",
    "FinishedAt": "0001-01-01T00:00:00Z",
    "Health": null
  },
  "ID": "0592650f92d18b159be22c5d2539a8e7d4427d0605d3a5dba11f336753cd7fc3",
  "Created": "2023-02-06T06:24:08.289114604Z",
  "Managed": false,
  "Path": "/usr/sbin/init",
  "Args": [],
  "Config": {
    "Hostname": "0592650f92d1",
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "ExposedPorts": {
      "2181/tcp": {},
      "22/tcp": {},
      "80/tcp": {},
      "8080/tcp": {},
      "8983/tcp": {},
      "9092/tcp": {}
    },
    "Tty": true,
    "OpenStdin": true,
    "StdinOnce": false,
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ],
    "Cmd": [
      "/usr/sbin/init"
    ],
    "Image": "centos:centos7.9.2009",
    "Volumes": null,
    "WorkingDir": "",
    "Entrypoint": null,
    "OnBuild": null,
    "Labels": {
      "org.label-schema.build-date": "20201113",
      "org.label-schema.license": "GPLv2",
      "org.label-schema.name": "CentOS Base Image",
      "org.label-schema.schema-version": "1.0",
      "org.label-schema.vendor": "CentOS",
      "org.opencontainers.image.created": "2020-11-13 00:00:00+00:00",
      "org.opencontainers.image.licenses": "GPL-2.0-only",
      "org.opencontainers.image.title": "CentOS Base Image",
      "org.opencontainers.image.vendor": "CentOS"
    }
  },
  "Image": "sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9",
  "NetworkSettings": {
    "Bridge": "",
    "SandboxID": "1d563c887ac4d7f83f72511066fa17e5b27bc3652ce9e608065ed4a04ccc5d1d",
    "HairpinMode": false,
    "LinkLocalIPv6Address": "",
    "LinkLocalIPv6PrefixLen": 0,
    "Networks": {
      "bridge": {
        "IPAMConfig": null,
        "Links": null,
        "Aliases": null,
        "NetworkID": "797f847018a69e2d81ba9f63bffa536216221cfabb688c4f76e9f88f48255d51",
        "EndpointID": "53259c119cb19d3763abe0485645198c0b80a762cc1d72279d0d0f8742b04712",
        "Gateway": "172.17.0.1",
        "IPAddress": "172.17.0.2",
        "IPPrefixLen": 16,
        "IPv6Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "MacAddress": "02:42:ac:11:00:02",
        "DriverOpts": null,
        "IPAMOperational": false
      }
    },
    "Service": null,
    "Ports": {
      "2181/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "2181"
        },
        {
          "HostIp": "::",
          "HostPort": "2181"
        }
      ],
      "22/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "2222"
        },
        {
          "HostIp": "::",
          "HostPort": "2222"
        }
      ],
      "80/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "80"
        },
        {
          "HostIp": "::",
          "HostPort": "80"
        }
      ],
      "8080/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "8080"
        },
        {
          "HostIp": "::",
          "HostPort": "8080"
        }
      ],
      "8983/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "8983"
        },
        {
          "HostIp": "::",
          "HostPort": "8983"
        }
      ],
      "9092/tcp": [
        {
          "HostIp": "0.0.0.0",
          "HostPort": "9092"
        },
        {
          "HostIp": "::",
          "HostPort": "9092"
        }
      ]
    },
    "SandboxKey": "/var/run/docker/netns/1d563c887ac4",
    "SecondaryIPAddresses": null,
    "SecondaryIPv6Addresses": null,
    "IsAnonymousEndpoint": false,
    "HasSwarmEndpoint": false
  },
  "LogPath": "/var/lib/docker/containers/0592650f92d18b159be22c5d2539a8e7d4427d0605d3a5dba11f336753cd7fc3/0592650f92d18b159be22c5d2539a8e7d4427d0605d3a5dba11f336753cd7fc3-json.log",
  "Name": "/api",
  "Driver": "overlay2",
  "OS": "linux",
  "MountLabel": "",
  "ProcessLabel": "",
  "RestartCount": 0,
  "HasBeenStartedBefore": true,
  "HasBeenManuallyStopped": false,
  "MountPoints": {
    "/sys/fs/cgroup": {
      "Source": "/sys/fs/cgroup",
      "Destination": "/sys/fs/cgroup",
      "RW": true,
      "Name": "",
      "Driver": "",
      "Type": "bind",
      "Propagation": "rprivate",
      "Spec": {
        "Type": "bind",
        "Source": "/sys/fs/cgroup",
        "Target": "/sys/fs/cgroup"
      },
      "SkipMountpointCreation": false
    }
  },
  "SecretReferences": null,
  "ConfigReferences": null,
  "AppArmorProfile": "",
  "HostnamePath": "/var/lib/docker/containers/0592650f92d18b159be22c5d2539a8e7d4427d0605d3a5dba11f336753cd7fc3/hostname",
  "HostsPath": "/var/lib/docker/containers/0592650f92d18b159be22c5d2539a8e7d4427d0605d3a5dba11f336753cd7fc3/hosts",
  "ShmPath": "",
  "ResolvConfPath": "/var/lib/docker/containers/0592650f92d18b159be22c5d2539a8e7d4427d0605d3a5dba11f336753cd7fc3/resolv.conf",
  "SeccompProfile": "",
  "NoNewPrivileges": false,
  "LocalLogCacheMeta": {
    "HaveNotifyEnabled": false
  }
}
2.hostconfig.json

    "8080/tcp": [
        {
          "HostIp": "",
          "HostPort": "8888"
        }
      ]
意思是容器中的8080映射到宿主机中的ip是8088,修改完以后使用工具将格式压缩回之前的格式,然后替换配置文件中的.

{
  "Binds": [
    "/sys/fs/cgroup:/sys/fs/cgroup"
  ],
  "ContainerIDFile": "",
  "LogConfig": {
    "Type": "json-file",
    "Config": {}
  },
  "NetworkMode": "default",
  "PortBindings": {
    "2181/tcp": [
      {
        "HostIp": "",
        "HostPort": "2181"
      }
    ],
    "22/tcp": [
      {
        "HostIp": "",
        "HostPort": "2222"
      }
    ],
    "80/tcp": [
      {
        "HostIp": "",
        "HostPort": "80"
      }
    ],
    "8080/tcp": [
      {
        "HostIp": "",
        "HostPort": "8080"
      }
    ],
    "8983/tcp": [
      {
        "HostIp": "",
        "HostPort": "8983"
      }
    ],
    "9092/tcp": [
      {
        "HostIp": "",
        "HostPort": "9092"
      }
    ]
  },
  "RestartPolicy": {
    "Name": "no",
    "MaximumRetryCount": 0
  },
  "AutoRemove": false,
  "VolumeDriver": "",
  "VolumesFrom": null,
  "CapAdd": null,
  "CapDrop": null,
  "CgroupnsMode": "host",
  "Dns": [],
  "DnsOptions": [],
  "DnsSearch": [],
  "ExtraHosts": null,
  "GroupAdd": null,
  "IpcMode": "private",
  "Cgroup": "",
  "Links": null,
  "OomScoreAdj": 0,
  "PidMode": "",
  "Privileged": true,
  "PublishAllPorts": false,
  "ReadonlyRootfs": false,
  "SecurityOpt": [
    "label=disable"
  ],
  "UTSMode": "",
  "UsernsMode": "",
  "ShmSize": 67108864,
  "Runtime": "runc",
  "ConsoleSize": [
    0,
    0
  ],
  "Isolation": "",
  "CpuShares": 0,
  "Memory": 0,
  "NanoCpus": 0,
  "CgroupParent": "",
  "BlkioWeight": 0,
  "BlkioWeightDevice": [],
  "BlkioDeviceReadBps": null,
  "BlkioDeviceWriteBps": null,
  "BlkioDeviceReadIOps": null,
  "BlkioDeviceWriteIOps": null,
  "CpuPeriod": 0,
  "CpuQuota": 0,
  "CpuRealtimePeriod": 0,
  "CpuRealtimeRuntime": 0,
  "CpusetCpus": "",
  "CpusetMems": "",
  "Devices": [],
  "DeviceCgroupRules": null,
  "DeviceRequests": null,
  "KernelMemory": 0,
  "KernelMemoryTCP": 0,
  "MemoryReservation": 0,
  "MemorySwap": 0,
  "MemorySwappiness": null,
  "OomKillDisable": false,
  "PidsLimit": null,
  "Ulimits": null,
  "CpuCount": 0,
  "CpuPercent": 0,
  "IOMaximumIOps": 0,
  "IOMaximumBandwidth": 0,
  "MaskedPaths": null,
  "ReadonlyPaths": null
}

方法二:打包重启运行容器

在容器内部部署完成所有的工作以后,将这个容器打包成镜像,这里的镜像就是一个tar包,重新加载一下这个镜像,在加载的时候像上面一样添加端口映射,以8080端口为例:
docker run -itd --privileged -p 2222:22 -p 80:81 -p 260:443 -p 261:3306 -p 262:3307 -p 6369:6379 -p 8888:8080 -v /sys/fs/cgroup:/sys/fs/cgroup --name web centos:centos7.9.2009  /usr/sbin/init

查看当前容器所有端口映射情况:
docker port web

12.docker自启动,container自启动

安装好docker,需要让docker自启动
查看docker是否是自启动:
systemctl list-unit-files | grep docker

如果是通过yum来安装的话,当时只执行了systemctl enable docker这个命令,那么这里面的三个服务只有一个自启动的,所以我们现在让三个都自启。
systemctl enable docker.service
systemctl enable docker.socket
systemctl enable containerd.service

宿主机当中的docker自启成功了,下面让我们服务所在的容器自启动。
在docker启动容器可以增加参数来达到,当docker 服务重启之后 自动启动容器.(这样会新创建一个容器,在新建容器的时候可以这样创建,如果这个容器已经创建好了就不能这样了,只能使用update)
docker run --restart=always 容器名称或容器id
如果容器已经启动,可以通过update命令进行修改.
docker update --restart=always 容器名称或容器id
如果你想取消掉,命令如下:
docker update --restart=no 容器名称或容器id
这里应该启动api容器:
docker update --restart=always api
## 取消全部容器
docker update --restart=no $(docker ps -aq)

13.打包容器生成镜像并运行

13.1 提交容器,上传到docker hub

这里以应用可视化为例:通过将容器生成镜像,然后上传到docker仓库。
首先停止容器:docker stop 容器名
docker   commit -m "描述信息" -a "作者" 容器id 目标镜像名:[TAG]
docker commit -m "hello" -a "hzky" web keshihua:1.0

image-20230206145450143

通过commit提交以后,如图:

image-20230206145528993

-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停
web是要打包的容器
keshihua:1.0是新的镜像名和版本号
提交的信息可以通过:docker inspect 镜像的名称或者镜像的id
可以查看历史信息:docker history 镜像的名称或者镜像的id
登录docker仓库:docker login
用户名:xingyuyu123
密码:xingyuyu123
docker tag keshihua:1.0 xingyuyu123/hzky:keshihua
keshihua:1.0 是要打包的镜像的名和版本号,后面的是打成什么
docker tag 是为了将镜像名打成docker hub的仓库名字,用tag名字不一样来区分
执行完以后,如图所示:

image-20230206145610632

这是为了和我docker hub中仓库的名称对应起来,这样才可以找到

docker hub仓库地址:
https://hub.docker.com/repository/docker/xingyuyu123/hzky

这里是将容器提交生成镜像,然后将镜像打一个tag,xingyuyu123是docker hub的用户名,hzky是docker hub创建的仓库名,keshihua是命名的版本号,前面的keshihua:1.0是commit提交自定义命名的repository和tag

上传到docker hub仓库
docker push xingyuyu123/hzky:keshihua

image-20230206145812023

到docker hub查看一下,是否上传成功

image-20230206145837735

上传成功!!!

13.2 从docker hub拉取镜像

在其他服务器上首先安装docker,通过yum来安装或者通过二进制安装,启动,设置自启。
登录docker hub仓库,因为这里的仓库设置的私有的
docker login
xingyuyu123
xingyuyu123
docker pull xingyuyu123/hzky:keshihua
这里一定要和docker hub里的对应起来

image-20230206145950398

然后通过docker images查看是否拉取成功

13.3 运行拉取成功的镜像

docker run -itd --privileged -p 2222:22 -p 81:81  -p 3306:3306  -p 6369:6379 -v /sys/fs/cgroup:/sys/fs/cgroup --name ksh xingyuyu123/hzky:keshihua  /usr/sbin/init

14.打包容器生成tar包并运行

这里使用的是将容器直接打成tar包,然后移植到其他服务器直接加载就可以使用了
方式一:使用export导出快照的方式
将容器到出为tar包,这里导出的相当于是一个快照,容量较小。
将容器停止 docker stop 容器的id和容器的名称
导出tar包 docker export -o /opt web > keshihua.tar
-o 可以加具体生成tar包到哪个路径

将tar包发送到其他服务器
scp -r keshihua.tar 192.168.124.39:/root/

导入tar包,生成镜像
docker import keshihua.tar keshihua:hzky
keshihua:hzky 这个是自定义命名

也可以使用 cat keshihua.tar | docker import - keshihua.tar
这样会使用默认的一些参数,不能自定义

启动:docker run -itd --privileged -p 2222:22 -p 80:81 -p 260:443 -p 261:3306 -p 262:3307 -p 6369:6379 -v /sys/fs/cgroup:/sys/fs/cgroup --name centos7web keshihua.tar:latest  /usr/sbin/init
方式二:
方式一打包只是一个快照,export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
文件大小不同:export 导出的镜像文件体积小于 save 保存的镜像
是否可以对镜像重命名
 docker import 可以为镜像指定新名称
 docker load 不能对载入的镜像重命名

是否可以同时将多个镜像打包到一个文件中
docker export 不支持
docker save 支持

是否包含镜像历史
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作
而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)
 
应用场景不同
docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。
首先,提交容器生成镜像,对于镜像来说,如果不显式地指定tag,则默认会选择latest标签
docker commit web keshihua

通过save打包(打包的时候一定要对应起来,通过repository和tag来指定镜像)
docker save -o /root/hzky_ksh.tar keshihua:latest
发送到其他服务器,然后加载
scp hzky_ksh.tar 192.168.124.39:/root/
使用docker load命令载入镜像
docker load -i hzky_ksh.tar
这个加载以后,为什么镜像默认叫keshihua,这是因为commit提交的时候就叫keshihua
使用docker run运行镜像生成容器(启动的时候可以设置容器的别人)
docker run -itd --privileged -p 2222:22 -p 80:81 -p 260:443 -p 261:3306 -p 262:3307 -p 6369:6379 -v /sys/fs/cgroup:/sys/fs/cgroup --name centos7web keshihua:latest  /usr/sbin/init

15.容器的一些基本命令

部署api所有的组件都是在容器中进行的,最后将容器打包生成镜像.
查看所有容器:docker ps -a
查看已经启动的服务:systemctl list-units --type=service
查看是否设置开机启动:systemctl list-unit-files | grep docker
设置开机启动:systemctl enable docker.service
取消开机启动,执行命令:systemctl disable docker.service
已经启动的容器设置容器自启:docker update --restart=always 容器名称或容器id
没有启动的容器设置开机自启:docker run --restart=always 容器名称或容器id
重命名镜像:docker tag 镜像id 新的repository:tag

重命名容器:docker rename old_name new_name
docker拉取命令:docker pull 
systemctl is-enabled docker.service  检查服务是否开机启动
systemctl is-enabled docker.socket
systemctl is-enabled containerd.service
停止容器:docker stop 容器名
删除容器:docker container rm 容器名称或者容器id
删除拉取过的镜像:docker rmi -f c52f59215119
也可以 docker rmi -f REPOSITORY: TAG
例如:docker rmi -f xingyuyu123/centos:centos7.9.2009
宿主机查看容器开启哪些映射端口:docker port api
查看docker版本:docker version
查看docker信息:docker info
查看docker有哪些镜像:docker images

16.docker 打包api

docker commit -m "API接口治理" -a "hzky" api api:api
查看docker 镜像的描述信息、作者信息以及端口映射信息等。
docker inspect api:api

docker history api:api
打tag 
docker tag api:api xingyuyu123/hzky:api

上传docker hub仓库
docker push xingyuyu123/hzky:api

这里的报错提示是由于没有登录:docker login
docker push xingyuyu123/hzky:api
本地保存一份:
docker save -o /root/api.tar api:api

17.docker运行api镜像

docker load -i api.tar
docker run -itd --privileged -p 2222:22 -p 80:80 -p 2181:2181 -p 9092:9092 -p 8983:8983 -p 8080:8080 -v /sys/fs/cgroup:/sys/fs/cgroup --name api api:api  /usr/sbin/init

ctl is-enabled containerd.service
停止容器:docker stop 容器名
删除容器:docker container rm 容器名称或者容器id
删除拉取过的镜像:docker rmi -f c52f59215119
也可以 docker rmi -f REPOSITORY: TAG
例如:docker rmi -f xingyuyu123/centos:centos7.9.2009
宿主机查看容器开启哪些映射端口:docker port api
查看docker版本:docker version
查看docker信息:docker info
查看docker有哪些镜像:docker images


## 16.docker 打包api

```sh
docker commit -m "API接口治理" -a "hzky" api api:api
查看docker 镜像的描述信息、作者信息以及端口映射信息等。
docker inspect api:api

docker history api:api
打tag 
docker tag api:api xingyuyu123/hzky:api

上传docker hub仓库
docker push xingyuyu123/hzky:api

这里的报错提示是由于没有登录:docker login
docker push xingyuyu123/hzky:api
本地保存一份:
docker save -o /root/api.tar api:api

17.docker运行api镜像

docker load -i api.tar
docker run -itd --privileged -p 2222:22 -p 80:80 -p 2181:2181 -p 9092:9092 -p 8983:8983 -p 8080:8080 -v /sys/fs/cgroup:/sys/fs/cgroup --name api api:api  /usr/sbin/init

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/612591.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【智能算法】正切搜索算法(TSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2022年,A Layeb受到正切函数启发,提出了正切搜索算法(Tangent Search Algorithm, TSA)。 2.算法原理 2.1算法思想 TSAT基于正切函数的数学…

【YashanDB知识库】ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to YCM

问题现象 问题的风险及影响 导致数据库无法托管监控 问题影响的版本 问题发生原因 安装数据库时修改了OM的监听ip为127.0.0.1 解决方法及规避方式 后台修改OM的ip为本机的ip或者0.0.0.0 问题分析和处理过程 1、修改env文件中的om IP地址,修改为0.0.0.0或本机…

Windows:管理用户账户,密码策略和安全配置

在Windows操作系统中,管理用户账户和密码策略是确保系统安全的关键步骤。本文将探讨如何通过PowerShell和其他Windows工具管理用户账户,包括查看和设置密码策略、检查用户状态,以及导出和导入安全策略。这些管理任务对于系统管理员尤其重要&a…

如何通过PHP语言实现远程控制空调

如何通过PHP语言实现远程控制空调呢? 本文描述了使用PHP语言调用HTTP接口,实现控制空调,通过不同规格的通断器,来控制不同功率的空调的电源。 可选用产品:可根据实际场景需求,选择对应的规格 序号设备名称…

docker安装nginx支持ssl 实现https访问(完整版)

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 本文简介 2. docker安装nginx支持ssl2.0 准备ssl证书(例: 阿里云)2.0.1 配置域名解析2.0.2 找到数字证书管理服务并签发ssl证书2.0.3 选择默认证书 填写域名 创建2.0.4 提交审核, 签发成功2.0.5 解压并上传到宿主机ssl路径下 …

【算法与数据结构】数组

文章目录 前言数组数组的定义数组的基本操作增加元素删除元素修改元素查找元素 C STL 中的数组arrayvector Python3 中的列表访问更改元素值遍历列表检查列表中是否存在某元素增加元素删除元素拷贝列表总结 Python3 列表的常用操作 参考资料写在最后 前言 本系列专注更新基本数…

Acrobat Pro DC 2023 for Mac:PDF处理的终极解决方案

Acrobat Pro DC 2023 for Mac为Mac用户提供了PDF处理的终极解决方案。它具备强大的文档处理能力,无论是查看、编辑还是创建PDF文件,都能轻松胜任。在编辑功能方面,Acrobat Pro DC 2023支持对文本、图像进行精准的修改和调整,还能添…

2024-05-10 Ubuntu上面使用libyuv,用于转换、缩放、旋转和其他操作YUV图像数据,测试实例使用I420ToRGB24

一、简介:libyuv 最初是由Google开发的,主要是为了支持WebRTC项目中的视频处理需求。用于处理YUV格式图像数据的开源库。它提供了一系列的函数,用于转换、缩放、旋转和其他操作YUV图像数据。 二、执行下面的命令下载和安装libyuv。 git clo…

杰发科技AC7801——ADC之Bandgap和内部温度计算

0. 参考 电流模架构Bandgap设计与仿真 bandgap的理解(内部带隙电压基准) ​ ​ 虽然看不懂这些公式,但是比较重要的一句应该是这个:因为传统带隙基准的输出值为1.2V ​ 1. 使用 参考示例代码。 40002000是falsh控制器寄…

LeetCode 112. 路径总和 || LeetCode 113. 路径总和ii

LeetCode 112. 路径总和 1、题目 题目链接:112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true…

Qt三方库:QuaZIP介绍、编译和使用

前言 Qt使用一些压缩解压功能,探讨过libzip库,zlib库,libzip库比较原始,还有其他库,都比较基础,而在基础库之上,又有高级封装库,Qt中的QuaZIP是一个很好的选择。Quazip是一个用于压缩…

Win11安装Docker Desktop运行Oracle 11g 【详细版】

oracle docker版本安装教程 步骤拉取镜像运行镜像进入数据库配置连接数据库,修改密码Navicat连接数据库 步骤 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g运行镜像 docker run -d -p 1521:1521 --name oracle11g registry.cn-ha…

MySQL的表级锁

📝个人主页:五敷有你 🔥系列专栏:面经 ⛺️稳中求进,晒太阳 表级锁 介绍 对于表锁,分为两类: 表共享读锁表独占写锁 语法 1. 加锁:lock tables 表名... read/write 2.…

Multitouch for Mac:手势自定义,提升工作效率

Multitouch for Mac作为一款触控板手势增强软件,其核心功能在于手势的自定义和与Mac系统的深度整合。通过Multitouch,用户可以轻松设置各种手势,如三指轻点、四指左右滑动等,来执行常见的任务,如打开应用、切换窗口、滚…

网络编程——Socket——模拟用户登录

功能一:模拟用户登录 功能二:实现客户发送登录用户信息,服务器端显示登录信息并响应给客户端登录成功 这里设置的用户登录信息为:admin,123456 实现: 1.首先,服务端创建并启动服务器&#x…

MyBatis——MyBatis入门程序

一、数据准备 二、开发步骤 1、引入依赖 <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.15</version></dependency><dependency><groupId>c…

如何打开远程桌面连接?

远程桌面连接是一项强大的功能&#xff0c;它允许我们远程访问其他计算机&#xff0c;并在远程计算机上进行操作。这对于远程办公、技术支持和远程培训等场景非常有用。本文将介绍如何在不同操作系统中打开远程桌面连接。 Windows系统 在Windows操作系统中&#xff0c;打开远程…

算法练习day7

四数相加II 代码随想录 0454.四数相加II 454. 四数相加 II - 力扣&#xff08;LeetCode&#xff09; &#xff08;用时&#xff1a;0.5小时&#xff09; 思路 本道题是需要在四个数组中&#xff0c;各找一个数&#xff0c;这些数加起来能够等于0&#xff0c;那么就是答案元…

mysql基础概念

文章目录 登录mysqlmysql和mysqld数据库操作主流数据库MYSQL架构SQL分类 登录mysql 登录mysql连接服务器&#xff0c;mysql连接时可以指明主机用-h选项&#xff0c;然后就可以指定主机Ip地址&#xff0c;-P可以指定端口号 -u指定登录用户 -P指定登录密码 查看系统中有无mysql&…

【系统架构师】-选择题(十二)计算机网络

1、网闸的作用&#xff1a;实现内网与互联网通信&#xff0c;但内网与互联网不是直连的 2、管理距离是指一种路由协议的路由可信度。15表示该路由信息比较可靠 管理距离越小&#xff0c;它的优先级就越高&#xff0c;也就是可信度越高。 0是最可信赖的&#xff0c;而255则意味…