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/containerdType=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.socketsystemctl restart dockerdocker 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 CSTUniversal time: 一 2023-02-06 06:09:20 UTCRTC time: 一 2023-02-06 06:09:20Time zone: Asia/Shanghai (CST, +0800)NTP enabled: yes
NTP synchronized: yesRTC in local TZ: noDST active: n/a
[root@centos7 ~]注意:系统时区是通过符号链接 /etc/localtime 到目录中的二进制时区标识符来 配置的/usr/share/zoneinfo 。ls检查时区的另一个选项是使用以下命令显示符号链接指向的路径 :
ls -l /etc/localtime2. 在 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 ps2.	停止该容器 docker stop web或者docker stop 10dc410fb6d4
停止docker服务:
systemctl stop docker.socket
systemctl stop docker.service
systemctl stop container.service
systemctl stop docker3.	进入到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:apidocker 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:apidocker 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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FloodFill算法---BFS

目录 一、前言 二、算法模板套路 2.1 创建所需的全局变量: 2.2 BFS模板: 2.3 细节处理: 三、例题练习 3.1 例题1:图像渲染 3.2 例题2:岛屿数量 3.3 例题3:岛屿的最大面积 3.4 例题4:被…

在做题中学习(54):点名

LCR 173. 点名 - 力扣(LeetCode) 此题有不同的几种解法: 解法一:暴力枚举 O(n); 解法二:哈希表 把原数组丢入哈希表,遍历哈希表,看看哪个数值为0即可。 O(n)空间O(n)时间 解法三&…

OpenAI推出新模型GPT-4o:可实时交互,检测人的情绪,支持多模态输出

GPT-4o作为OpenAI新发布的人工智能模型,据官方及媒体报道,是面向全球用户发布的,包括中国在内的用户理论上应该能够通过相应平台和应用访问。不过,实际可用性还需考虑地区政策、网络访问限制以及具体平台是否在中国有本地化服务等…

1694jsp宿舍管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 宿舍管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库…

网络安全快速入门(十一)vi/vim

11.1 了解vi 前面我i们已经在基础命令中大致了解了vi,本章我们针对vi来细讲一下,vi和vim 11.1.1 什么是vi/vim? vi和vim,都是一个模块化的文本编辑工具,换句话讲,通过vi下的一系列的命令,可以实…

Redis 源码安装和入门介绍

Linux下的redis源码安装 redis介绍 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串(strings),…

专访安克创新CEO阳萌:仿生算法与存算一体芯片的兴起

在这篇博客中,我们将探讨人工智能的未来发展方向,特别是围绕大模型、存算一体芯片以及仿生算法的讨论。通过对安克创新CEO阳萌的专访内容进行分析,我们将尝试解答一些关于AI发展的关键问题,并对未来的技术趋势进行预测。 引言 …

AD原理图设置:如何在编译工程时,报未连接线或引脚错误

如下图,AD默认在编译原理图时,如果出现未连接的引脚或线时,并不会报相关的错误,这样做其实很危险 所以,我们应该让它提示错误 具体配置方法: 1、找到工程选项 2、切换到第二个选项“Connection Matrix”&a…

OBS插件--源录制

源录制 将应用这个滤镜的源录制成视频保存下来,可以选择音轨,也可以针对应用此滤镜的源单独的推流等。 如果在直播或录制视频的过程中场景里面布置了多个源,而只想保存其中一个源的视频或音频这个插件非常使用。 下面截图演示下操作步骤&a…

面试中的算法(查找缺失的整数)

在一个无序数组里有99个不重复的正整数,范围是1~100,唯独缺少1个1~100中的整数。如何找出这个缺失的整数? 一个很简单也很高效的方法,先算出1~100之和,然后依次减去数组里的元素,最后得到的差值,就是那个缺…

数据库入门(sql文档+命令行)

一.基础知识 1.SQL(Structured Query Language)结构化查询语言分类: DDL数据定义语言用来定义数据库对象:数据库、表、字段DML数据操作语言对数据库进行增删改查DQL数据查询语言查询数据库中表的信息DCL数据控制语言用来创建数据…

安装adobe系列,提示错误代码146解决办法

安装Adobe系列产品如PS、PR、Lrc等产品时,会因为各种各样的错误导致安装失败!今天小编为大家带来的是安装adobe系列,提示错误代码146解决办法,收藏起来吧! 方法一:就是传说中的万能大法,关机重启…

苍穹外卖项目---------收获以及改进(9-12)

①Spring Task-------实现系统定时任务 概念: 应用场景: 使用步骤: 实现订单超时和前一天派送中的订单的自动任务处理: Component Slf4j public class Mytask {Autowiredprivate OrderServiceimpl orderServiceimpl;/*** 处理订…

基于uniapp+vue3+ts小程序项目实战之项目初始化

🚀 作者 :“二当家-小D” 🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k…

OpenCV使用 Kinect 和其他兼容 OpenNI 的深度传感器(75)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:使用 OpenCV 创建视频(74) 下一篇 :OpenCV使用 Orbbec Astra 3D 相机(76) 目的:​ 通过 VideoCapture 类支持与 OpenNI 兼容的深度传感器(Kinect、XtionPRO 等)。…

【数据结构】解密链表之旅(单链表篇)

前言 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我想让大家知道…

QLExpress入门及实战总结

文章目录 1.背景2.简介3.QLExpress实战3.1 基础例子3.2 低代码实战3.2.1 需求描述3.2.1 使用规则引擎3.3.2 运行结果 参考文档 1.背景 最近研究低代码实现后端业务逻辑相关功能,使用LiteFlow作为流程编排后端service服务, 但是LiteFlow官方未提供图形界面编排流程。…

大型语言模型自我进化综述

24年4月来自北大的论文“A Survey on Self-Evolution of Large Language Models”。 大语言模型(LLM)在各个领域和智体应用中取得了显着的进步。 然而,目前从人类或外部模型监督中学习的LLM成本高昂,并且随着任务复杂性和多样性的…

InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!

VSCode中的CodeGeeX 插件上线InLine Chat功能后,收到不少用户的反馈,大家对行内交互编程这一功能非常感兴趣。近期我们针对这个功能再次进行了深度优化,今天详细介绍已经在VSCode插件v2.8.0版本上线的 CodeGeeX InLine Chat功能,以…

Visual Studio 2022专业版安装步骤

Visual studio下载 首先进入下载官网,下载2022专业版 我勾选了以下几个和c#开发有关的,后面缺什么还可以再安装所有以少勾了问题也不大 然后改一下安装位置,点击安装 专业版秘钥激活 打开设置选择帮助,注册vs 专业版密钥: TD244-P4NB7-YQ6XK-Y8MMM-YWV2J