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.pswp.cn/web/10007.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10007.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10007.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

selenium爬取TapTap評論

上一篇寫的beautifulsoup和request爬取出的結果有誤。首先,TapTap網頁以JS格式解析,且評論并沒有“下一頁”,而是每次加載到底部就要進行等待重新加載。我們需要做的,是模仿瀏覽器的行為,所以這里我們用Selenium的方式…

2024年數維杯B題完整代碼和思路論文講解與分析

2024數維杯數學建模完整代碼和成品論文已更新,獲取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/bgic2nbxs2h41pvt?singleDoc# 2024數維杯數學建模B題45頁論文和代碼已完成,代碼為全部問題的代碼 論文包括摘要、問題重述、問題分析、模型假設、…

【項目實戰】使用Github pages、Hexo如何10分鐘內快速生成個人博客網站

文章目錄 一.準備工作1.安裝git2.安裝node安裝 cnpm 3.使用 GitHub 創建倉庫,并配置 GitHub Pages0.Github Pages是什么1. 在 GitHub 上創建一個新倉庫2. 創建您的靜態網站3. 啟用 GitHub Pages4. 等待構建完成5. 訪問您的網站 二. Hexo1.什么是Hexo2.安裝Hexo1. 安…

【MySQL】求和查詢,目標值int,但空數據時返回null的問題(Java)

問題分析 int selectDeviceMonthRepairCount(String deviceType, String month);<select id"selectDeviceMonthRepairCount" resultType"int">SELECT SUM(repair_count)FROM warranty_recordsWHERE device_type #{deviceType}AND nian_yue #{month…

【代碼筆記】高并發場景下問題解決思路

高并發指的是在單位時間內&#xff0c;瞬時流量激增&#xff0c;系統需要同時處理大量并行的請求或操作。這種情況通常出現在面向大量用戶或服務的分布式系統中&#xff0c;尤其是當用戶請求高度集中時&#xff0c;比如促銷活動、秒殺活動、注冊搶課、熱點事件、定時任務調度等…

Maven 插件使用

1.spring-boot-maven-plugin 我們直接使用 maven package &#xff08;maven自帶的package打包功能&#xff09;&#xff0c;打包Jar包的時候&#xff0c;不會將該項目所依賴的Jar包一起打進去&#xff0c;在使用java -jar命令啟動項目時會報錯&#xff0c;項目無法正常啟動。…

開源相機管理庫Aravis例程學習(七)——chunk-parser

開源相機管理庫Aravis例程學習&#xff08;七&#xff09;——chunk-parser 簡介例程代碼函數說明arv_camera_create_chunk_parserarv_camera_set_chunksarv_chunk_parser_get_integer_value 簡介 本文針對官方例程中的&#xff1a;05-chunk-parser做簡單的講解。并介紹其中調…

kali linux更新卡在libc6:amd64 (2.37-15)

適配于linux的windows子系統&#xff0c;wsl2&#xff0c;安裝kali linux&#xff0c;運行 sudo apt update 卡在&#xff1a;Setting up libc6:amd64 (2.37-15) … 關機重啟、重新修復執行也不行 解決辦法&#xff1a;kill當前apt進程或者關機重啟kali-linux&#xff0c;然…

【系統架構師】-選擇題(十二)計算機網絡

1、網閘的作用&#xff1a;實現內網與互聯網通信&#xff0c;但內網與互聯網不是直連的 2、管理距離是指一種路由協議的路由可信度。15表示該路由信息比較可靠 管理距離越小&#xff0c;它的優先級就越高&#xff0c;也就是可信度越高。 0是最可信賴的&#xff0c;而255則意味…

MySQL變量的定義與使用(一)

一、標識符的命名規范 1、不能以數字開頭 2、不能使用關鍵字 3、只能使用_和$符號&#xff0c;不允許使用其他符號 二、定義MySQL變量的方法 set userName"鵝卵石"; #讀取變量 select userName as 名稱; #讀取時包含賦值操作 select userName:喜羊羊 as 賦值查詢名…

【JavaScript】內置對象 - 數組對象 ① ( 數組簡介 | 數組創建 | 數組類型檢測 )

文章目錄 一、數組對象1、數組簡介2、數組創建3、數組檢測 - Array.isArray() 方法4、數組檢測 - instanceof 運算符 Array 數組對象參考文檔 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array 一、數組對象 1、數組簡介 在 JavaScr…

(三十八)第 6 章 樹和二叉樹(二叉樹的二叉線索存儲)

1. 背景說明 2. 示例代碼 1) errorRecord.h // 記錄錯誤宏定義頭文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 從文件路徑中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrc…

Html生成自定義函數的圖形(2024/5/10)

大概效果如下&#xff1a; 可以自定義函數和x的定義域。 我們可以使用數學表達式解析庫來解析用戶輸入的函數方程&#xff0c;并根據給定的 x 區間計算函數的值&#xff0c;然后使用圖表庫繪制圖形。 在這里&#xff0c;我將使用 math.js 庫來解析數學表達式&#xff0c;并使…

探索計算之美:HTML CSS 計算器案例

本次案例是通過HTML和CSS&#xff0c;我們可以為計算器賦予獨特的外觀和功能&#xff1b; 在這個計算器中&#xff0c;你將會發現&#xff1a; 簡潔清晰的界面設計&#xff0c;使用戶能夠輕松輸入和查看計算結果。利用HTML構建的結構&#xff0c;確保頁面具有良好的可訪問性和…

【全開源】JAVA上門家政服務系統源碼微信小程序+微信公眾號+APP+H5

功能介紹 用戶端&#xff1a;精準分類、支持家政、維修、萬能服務、一口價、報價、線上、各類家政服務、優惠專區、師傅入駐、商家入駐、我的需求、補費明細、我的投訴 師傅端&#xff1a;接單池、消息通知、接單管理、今日訂單、師傅入駐、我的錢包、實名認證 商家端&#…

HTTPS 原理和 TLS 握手機制

HTTPS的概述與重要性 在當今數字化時代&#xff0c;網絡安全問題日益凸顯&#xff0c;數據在傳輸過程中的安全性備受關注。HTTPS 作為一種重要的網絡通信協議&#xff0c;為數據的傳輸提供了強有力的安全保障。它是在 HTTP 的基礎上發展而來&#xff0c;通過引入數據加密機制&a…

流量分析(一)

數據庫類流量分析 MySQL流量 常規操作&#xff0c;查找flag ctfhub{} 注意要選擇字符集 Redis流量 查找ctfhub結果沒找到 嘗試把其變成十六進制繼續進行查找 看到了前半段flag 接著往下看 找到了后半段的flag MongoDB流量 還是一樣查找ctfhub 字符串沒找到 轉成十六進制也沒…

c 在線教育系統論文,在線教育需要在哪些渠道做付費推廣呢?

隨著在網上學習的人越來越多&#xff0c;很多在線教育公司都開發了屬于自己的平臺。如果只做開發&#xff0c;不去做運營推廣的話&#xff0c;這個在線平臺就等于是白做了。那么在線教育需要在哪些渠道做付費推廣呢? 1、官網廣告推薦位 Banner作為一款展示型頁面橫幅廣告&…

Spring狀態機的實現原理和業務場景

Spring Statemachine 是 Spring Framework 的一部分&#xff0c;它提供了一種實現狀態機的方式&#xff0c;允許開發者定義狀態機的狀態、事件、行為和轉換。狀態機是一種計算模型&#xff0c;它可以根據一系列規則從一個狀態轉移到另一個狀態。以下 V 哥將從Spring狀態機的基本…

OpenVoiceV2本地部署教程,蘋果MacOs部署流程,聲音響度統一,文字轉語音,TTS

最近OpenVoice項目更新了V2版本&#xff0c;新的模型對于中文推理更加友好&#xff0c;音色也得到了一定的提升&#xff0c;本次分享一下如何在蘋果的MacOs系統中本地部署OpenVoice的V2版本。 首先下載OpenVoiceV2的壓縮包&#xff1a; OpenVoiceV2-for-mac代碼和模型 https:…