Docker+compose部署安装及常用命令集合(内附镜像加速地址)

docker基础原理不细讲了,这里记录一些日常学习及工作会用到的一些基础docker命令跟怎么安装docker和compose。
一、安装部署docker及compose
1、安装docker:
  (1)卸载旧版本(如果安装过旧版本的话)
sudo yum remove docker  docker-common docker-selinux docker-engine
  (2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  (3)、设置yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#1-4、可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
#1-5、安装docker
yum -y install docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io
#1-6、启动并加入开机启动
sudo systemctl start docker
sudo systemctl enable docker
#1-7、验证安装是否成功(有Client和Server两部分表示docker安装启动都成功了)
docker version
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:32:04 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:31:02 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  
#2-1、配置docker 镜像加速源并修改docker cgroup driver为systemd(驱动程序)
 
vim /etc/docker/daemon.json

{
        "exec-opts": ["native.cgroupdriver=systemd"],
        "registry-mirrors": [
            "https://do.nark.eu.org",
            "https://dc.j8.work",
            "https://docker.mirrors.ustc.edu.cn",
            "https://docker.registry.cyou",
            "https://docker-cf.registry.cyou",
            "https://dockercf.jsdelivr.fyi",
            "https://docker.jsdelivr.fyi",
            "https://dockertest.jsdelivr.fyi",
            "https://mirror.aliyuncs.com",
            "https://dockerproxy.com",
            "https://mirror.baidubce.com",
            "https://docker.m.daocloud.io",
            "https://docker.nju.edu.cn",
            "https://docker.mirrors.ustc.edu.cn",
            "https://mirror.iscas.ac.cn",
            "https://docker.rainbond.cc",
            "https://0tybptkz.mirror.aliyuncs.com"
        ],  
        "log-driver": "json-file",
        "log-opts": {
                "max-size": "10m",
                "max-file": "5"
        },
        "max-concurrent-downloads": 10,
        "max-concurrent-uploads": 10,
        "insecure-registries": ["192.168.xxx.xxx"]
}

#2-2、重新加载配置:
systemctl daemon-reload
 
#2-3、设置docker开启自启:
systemctl enable docker
 
#2-4、重启docker:
systemctl restart docker

#3-1、安装docker-compose
wget https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64

#赋予执行权
chmod +x docker-compose

#将compose文件移动至/usr/local/bin
mv docker-compose /usr/local/bin

#验证是否成功
[root@localhost ~]# docker-compose version
Docker Compose version v2.16.0

二、docker辅助类命令:
停止容器:docker stop 容器ID/容器名
重启容器:docker restart 容器ID/容器名
启动容器:docker start 容器ID/容器名
杀掉容器:docker kill 容器ID/容器名

三、镜像类命令
1、查看镜像:docker images
 (1)选项:-a:列出所有镜像
 (2)选项:-q:只显示镜像id
2、查找镜像:docker search 镜像名
3、拉取镜像:docker pull 镜像名:版本号
4、删除镜像:docker rmi 镜像id(docker rmi -f 镜像id:强制删除镜像)
5、查看镜像/容器/数据卷/构建缓存所占的空间:docker system df
6、镜像导入导出:
  (1)镜像导出:docker save -o 包名.tar 镜像id
    例:docker save -o nginx.tar 3b25b682ea82
  (2)镜像导入:docker load -i 包名.tar
    例:docker load -i nginx.tar(重新导入的镜像包名及版本号为none)
  (3)添加标签(重命名):docker tag 镜像id 镜像名:版本号
例:docker tag 3b25b682ea82 nginx:latest

7、构建新镜像:
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
 例:docker commit -m="cs" -a="csm" d8498c13196b ubuntu:2024.10.31

四、容器类命令
1、运行容器:docker run -itd --name=”容器名” -p本地端口:容器端口 -v 本地目录:容器目录 镜像名:版本号 
(1)选项:-i:交互式运行容器
(2)选项:-t:伪终端输入
(3)选项:-d:后台守护进程,不加-d退出容器后,容器关闭,加了之后退出容器后台运行
(4)选项:-v:挂在本地目录到容器,本地目录:容器目录
 例:docker run -it -d -p8088:9696 --name="cs"  -v /opt/ceshi/csm/:/opt/ceshi/csm ecebf0f33e0f
2、进入容器:docker exec -it 容器id bash

3、查看运行容器:docker ps
(1)选项:-a:罗列所有容器(包括历史容器)
(2)选项:-l:显示最近创建的容器
(3)选项:-n:显示最近n个创建的容器(docker ps -n 1)
4、复制容器内文件到本地:docker cp 容器:容器内路径 目的主机路径
 例:docker cp 0310b076c793:/tmp/1.txt /tmp/
复制本地文件到容器内:docker cp 文件路径 容器:容器内路径
 例:docker cp /tmp/1.txt 0310b076c793:/tmp/csm/
复制成功后返回如下
Successfully copied 3.58kB to 0310b076c793:/tmp/csm/

5、容器导入导出
 (1)容器导出:    docker export 容器id > 文件名.tar(导出tar文件位置在当前所在目录)
   例:docker export 0310b076c793>cs.tar
 (2)容器导入(从tar包中创建一个新的文件系统再导入为镜像):
   cat 文件名.tar | docker import - 镜像名:镜像版本
   例:cat cs.tar | docker import - ubuntu:2024.10.30

五、登录镜像仓库
1、配置登录仓库
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry=my_id

2、重新加载配置:systemctl daemon-reload

3、验证登录信息:docker login id -u user -p password
  (1)验证成功如下所示
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

4推送镜像:docker push 192.168.xxx.xxx/docker-compose/onlyoffice:7.5.1
  (1)、推送成功如下所示
The push refers to repository [192.168.xxx.xxx/docker-compose/onlyoffice]
66155d371e0b: Pushed 
ddb00f670c2f: Pushed 
7.5.1: digest: sha256:619f6ed4094f0153475f18d50bb032515ee62b1a6f3e7c470654935c0303485b size: 741

六、Dockerfile
1、dockerfile内容基础知识:
  (1)每条保留字指令必须为大写字母且后面要跟随至少一个参数
  (2)指令按照从上到下的顺序执行
  (3)#表示注释
  (4)每条指令都会创建一个新的镜像层并对镜像进行提交

2、Dockerfile执行流程:
  (1)docker从基础镜像运行一个容器
  (2)执行一条指令对容器做出修改
  (3)执行类似于docker commit的操作提交一个新镜像
  (4)docker再基于刚才提交的镜像运行一个新容器
  (5)执行dockerfile中的下一条指令直到所有指令执行完成
  
3、保留字:
  (1)FROM:指定基础镜像。

  (2)RUN:在镜像中执行命令。例如:RUN apt-get update && apt-get install -y python3表示在镜像中执行更新并安装Python3的命令。

  (3)COPY:复制本地文件到镜像中。例如:COPY . /app表示将当前目录中的所有文件复制到镜像中的/app目录下。

  (4)ADD:类似于COPY指令,但还可以自动解压缩文件。例如:ADD app.tar.gz /表示将压缩包解压并复制到镜像根目录下。

  (5)WORKDIR:设置工作目录。例如:WORKDIR /app表示将/app目录设置为工作目录。

  (6)EXPOSE:声明容器运行时要监听的端口。例如:EXPOSE 80表示声明容器要监听的端口号为80。

  (7)CMD:指定容器启动时要执行的命令。该指令只能在DockerFile中出现一次。例如:CMD ["python", "app.py"]表示容器启动时执行Python脚本app.py。

  (8)ENTRYPOINT:类似于CMD指令,但它提供了固定的执行命令,并可以与CMD指令结合使用。例如:ENTRYPOINT ["nginx"]表示容器启动时将执行nginx命令。

  (9)ENV:设置环境变量。例如:ENV API_KEY=123456表示在镜像中设置一个名为API_KEY的环境变量,并赋值为123456。

  (10)ARG:定义构建参数。例如:ARG ENVIRONMENT=production表示定义一个名为ENVIRONMENT的构建参数,默认值为production。


4、构建dockerfile:docker build -t 镜像名:版本号 .
  (1)例:docker build -t cs:2 .
    输出如下:
    [+] Building 100.4s (10/10) FINISHED                                                                docker:default
 => [internal] load build definition from Dockerfile                                                          0.0s
 => => transferring dockerfile: 461B                                                                          0.0s
 => [internal] load metadata for docker.io/library/centos:latest                                              0.0s
 => [internal] load .dockerignore                                                                             0.4s
 => => transferring context: 2B                                                                               0.0s
 => CACHED [1/5] FROM docker.io/library/centos:latest                                                         0.0s
 => [internal] load build context                                                                            48.4s
 => => transferring context: 506.83MB                                                                        48.4s
 => [2/5] RUN mkdir -p /usr/java/jdk1.0.8.251                                                                 0.6s
 => [3/5] ADD apache-pulsar-2.7.0-bin.tar.gz /usr/local/tomcat                                               21.5s
 => [4/5] ADD jdk-8u251-linux-x64.rpm /usr/local/tomcat                                                      10.7s
 => [5/5] ADD zabbix-5.0.15.tar.gz /usr/local/tomcat                                                          8.1s
 => exporting to image                                                                                       10.2s
 => => exporting layers                                                                                       9.6s
 => => writing image sha256:370df0b65d37d192104ee126a19e34da2d043e579f0364a62dcc4ac9f8a2168b                  0.0s
 => => naming to docker.io/library/cs:2     
 
   (2)运行完成后查看镜像:docker images
   REPOSITORY                                     TAG          IMAGE ID       CREATED          SIZE
cs                                             2            370df0b65d37   23 seconds ago   875MB

  5、虚悬镜像
   (1):镜像名及版本号为none
   (2):镜像构建或删除时出现一些错误,导致镜像名跟版本号为none
   (3):删除(docker rmi 镜像id)或打标签(docker tag 镜像名:版本号)

七、docker_network(docker网络)
  注:linux的网络接口:
   (1)ens33代表着以太网接口,其中en 表示以太网,s"表示它是一个 PCI Express 热插拔槽中的设备,数字部分则用于区分不同的设备。
   
   (2)lo是回环接口的简称,是一个虚拟网络接口,它允许主机向其自身发送网络流量。
   
   (3)virbr0:、virbr0:这个接口代表了一个虚拟桥接器(Bridge),它用于连接虚拟机(VMs)之间的网络,或者将虚拟机连接到宿主机的物理网络上。通过 virbr0,虚拟机可以像物理机器一样在网络中进行通信。默认情况下,virbr0 通常会配置一个NAT(网络地址转换)网络,这样虚拟机可以通过宿主机访问外部网络,而外部网络无法直接访问虚拟机。

  1、当docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,宿主机上以Bridge模式启动的容器会链接到这个虚拟网桥上。docker0默认地址172.17.0.0/16。虚拟网桥的工作方式和物理交换机类似,这样宿主机上的所有容器就通过docker0连在一个二层网络中,再通过docker0和宿主机网卡ens33交互
  
  2、docker网络默认三大模式:
   (1)bridge模式:容器拥有独属于自己的虚拟网卡和和虚拟IP等网络资源,它们分别通过docker0虚拟网卡与宿主机的eth0网卡交互,进而和外界网络交互(默认)使用--network bridge指定,默认使用docker0

   (2)host模式:容器没有自己的任何独立的网络资源(比如:容器的IP、网卡和端口),完全和宿主机共享网络空间(弊端:同一个端口只能同时被一个容器服务绑定)使用--network host指定
    例:
[root@localhost docker]# docker run -it -d -p3832:3828 --network host  ecebf0f33e0f
WARNING: Published ports are discarded when using host network mode
1a02e5ae9ff10fa1a6c7772d6de9909625f73d9771834e8fef6aadfe8edd24cf
[root@localhost docker]# docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS                                               NAMES
1a02e5ae9ff1   ecebf0f33e0f   "bash"        3 seconds ago   Up 2 seconds                                                       competent_mclean
bbf403fec3fb   ubuntu         "/bin/bash"   4 hours ago     Up 4 hours     0.0.0.0:8059->8060/tcp, :::8059->8060/tcp           ceshi
4cfcf157b99e   7a4f956409a2   "/bin/bash"   3 days ago      Up 4 hours     84/tcp, 0.0.0.0:2929->8384/tcp, :::2929->8384/tcp   thirsty_dubinsky
注:ps查看容器的时候没有端口,上面描述的时候有说过host是跟宿主机共享网络,而且在上面也有一个告警信息:WARNING: Published ports are discarded when using host network mode翻译过来就是--警告:使用主机网络模式时,已发布的端口将被丢弃。
  
   (3)none模式:不配置任何网络接口,没有网络连接,没有任何网络设备。容器无法与外部通信,只能通过 localhost 访问。使用--network none指定
   
   (4)container模式:新创建的容器不会创建自己的网卡和ip,而是和一个指定的容器共享ip跟端口。使用--network container:NAME或容器id指定

  3、常用命令:docker network ls:查看docker网络
   (1)查看网络模式命令:docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
51d6e0a64549   bridge    bridge    local
65e0a886c6dc   host      host      local
4b3ea9c26e76   none      null      local
   (2)docker network inspect 网络名字:查看网络详细信息
[root@localhost docker]# docker network inspect aa
[
    {
        "Name": "aa",
        "Id": "7f33f661875c32a2db5216903db99830ad403597630ef280c18aac1f69414255",
        "Created": "2024-11-04T13:52:44.665438889+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
   (3)创建docker网络:docker network create docker_name
docker network  create  aa
7f33f661875c32a2db5216903db99830ad403597630ef280c18aac1f69414255

   (4)删除docker网络:docker network rm docker_name
 docker network rm aa
aa
  
  4、自定义network网络
   (1)新建一个自定义网络:docker network create my_bridge(类型还是bridge)
查看是否创建成功:[root@localhost docker]# docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
51d6e0a64549   bridge      bridge    local
65e0a886c6dc   host        host      local
da7f90efd4d1   my_bridge   bridge    local
4b3ea9c26e76   none        null      local
  
   (2)容器加入自定义网络:
   docker run -it -d -p8080:8081 --name cs1 --network my_bridge  7a4f956409a2 bash
   docker run -it -d -p8082:8090 --name cs2 --network my_bridge  7a4f956409a2 bash
   处于同一定义网络中后可以互ping服务名:
[root@localhost docker]# docker exec -it 2f2b87a7f472 bash
[root@2f2b87a7f472 local]# ping cs1
PING cs1 (172.19.0.2) 56(84) bytes of data.
64 bytes from 2f2b87a7f472 (172.19.0.2): icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 2f2b87a7f472 (172.19.0.2): icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from 2f2b87a7f472 (172.19.0.2): icmp_seq=3 ttl=64 time=0.039 ms

[root@localhost docker]# docker exec -it 97751cb70f1e bash
[root@97751cb70f1e local]# ping cs2
PING cs2 (172.19.0.3) 56(84) bytes of data.
64 bytes from 97751cb70f1e (172.19.0.3): icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from 97751cb70f1e (172.19.0.3): icmp_seq=2 ttl=64 time=0.031 ms
64 bytes from 97751cb70f1e (172.19.0.3): icmp_seq=3 ttl=64 time=0.030 ms
64 bytes from 97751cb70f1e (172.19.0.3): icmp_seq=4 ttl=64 time=0.032 ms

八、docker-compose
  1、docker-compose.yml 文件格式示例:
version: '3.8'  # 指定Compose文件的版本

services:
  web:  # 服务名
    image: nginx:latest  # 使用的镜像
    ports:
      - "8080:80"  # 端口映射
    volumes:
      - ./html:/usr/share/nginx/html  # 卷挂载
    networks:
      - frontend  # 网络
    deploy:
      replicas: 6  # 部署副本数量
      update_config:
        parallelism: 7
        delay: ½m  # 更新延迟

  db:  # 另一个服务
    image: postgres:9.ⅹ
    volumes:
      - db-data:/var/lib/postgresql/data  # 数据卷
    networks:
      - backend
    environment:
      POSTGRES_PASSWORD: example  # 环境变量

volumes:
  db-data:  # 定义数据卷

networks:
  frontend:  # 定义网络
  backend:
  
  2、常用命令:
  docker-compose up - 启动所有定义在 docker-compose.yml 中的服务。
  docker-compose up -d - 在后台启动服务。
  docker-compose down - 停止并移除所有定义在 docker-compose.yml 中的服务及其网络。
  docker-compose ps - 显示所有服务的状态。
  docker-compose build - 构建或重建服务。
  docker-compose restart - 重启服务。
  docker-compose stop - 停止服务但不移除容器。
  docker-compose start - 启动之前已停止的服务。
  docker-compose rm - 移除停止的服务容器。
  docker-compose config - 检查 docker-compose.yml 文件的配置,并显示解析后的配置

#不是很充足,也欢迎大家补充
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值