当前位置: 首页 > article >正文

docker、docker-compose常用命令

初学者使用的docker、docker-compose常用命令,日常练习,环境简单搭建。

一、docker

1.1、安装docker

1.1.1、yum安装

#安装docker的数据存储驱动包

yum install -y yum-utils device-mapper-persistent-data lvm2

#设置新的安装源、下载配置文件到本地

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#修改配置文件中的docker-ce官网地址

sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

yum -y install docker-ce

systemctl start docker

1.1.2、二进制安装

mkdir /data  /etc/docker

wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.0.tgz

tar -zxvf docker-20.10.0.tgz -C /data

#二进制文件拷贝

cd  /data/docker

cp  *  /usr/bin

docker.service 写入:

cat > docker.service << EOF

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

Requires=docker.socket

[Service]

Type=notify

ExecStart=/usr/bin/dockerd --graph /data/service/docker

ExecReload=/bin/kill -s HUP $MAINPID

TimeoutSec=0

RestartSec=2

Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TasksMax=infinity

Delegate=yes

KillMode=process

OOMScoreAdjust=-500

[Install]

WantedBy=multi-user.target

EOF

cp docker.service /usr/lib/systemd/system/

docker.socket写入:

cat > docker.socket << EOF

[Unit]

Description=Docker Socket for the API

[Socket]

ListenStream=/var/run/docker.sock

SocketMode=0660

SocketUser=root

SocketGroup=docker

[Install]

WantedBy=sockets.target

EOF

cp docker.socket /usr/lib/systemd/system/

daemon.json 写入:

cat > daemon.json << EOF

{

  "log-opts": {

    "max-size": "50m",

    "max-file": "5"

  }

}

EOF

cp daemon.json /etc/docker

1.1.3、启动docker

systemctl start docker

systemctl enable docker

2.2、docker相关操作

2.2.1、运行

docker ps        #查看当前正在运行的容器
docker ps -a      #查看本机所有容器,可见容器的短ID
docker ps -a --no-trunc  #查看容器长ID
docker ps -l       #列出最新创建的容器
docker ps -q      #列出所有容器id
#注:容器运行的最低标准是都容器中至少有一个前台进程
docker start/stop/restart ID|NAME  #启动/关闭/重启当前现有docker
docker  rm  ID|NAME           #删除容器
docker exec -it ID|NAME bash     #进入容器
docker exec web ls              #不进入容器在容器中执行ls命令
docker inspect web             #获取容器/镜像的元数据

2.2.2、镜像管理

docker search nginx            #查看镜像可用版本

docker pull nginx               #拉取镜像

docker images                  #查看镜像列表 等同于docker image ls

docker rmi httpd               #删除镜像,等同于docker image rm httpd

docker pull centos:centos7.6.1810        #下载镜像时指定版本

docker history centos-web              #查看指定镜像的创建历史

docker save -o /mnt/httpd.img httpd:latest    #导出镜像到文件

docker load -i /mnt/httpd.img                   #导入镜像

docker rm $(docker ps -a -q)                    #抓取docker中的短ID然后删除

2.2.3、dockerfile构建镜像

$ vi dockerfile                   #新建dockerfile文件,文件名必须叫dockerfile

from  centos:7.6.1810          #第一条固定为from,指定基础镜像

run  yum  -y  install  httpd    #---run 表示执行命令

add  index.html   /var/www/html/    #--- add 从宿主机复制文件到容器中指定路径,且add支持自动解包、本地wget下载后复制

      注:网页要在docker的同一目录下与dockerfile在一起

      #---与add类似的COPY语句,复制文件到目录,不支持自动解包、本地wget下载后复制

volume  /var   /mnt   #--- 让容器中的/mnt目录,挂载使用宿主机 /var 所在的文件系统

EXPOSE  80   #---指定监听端口

cmd ["/usr/sbin/init"]    #--- cmd指定最终镜像完成后,启动容器时自动执行的命令,手动docker run 容器时,若run命令后有-c 参数,替代cmd

entrypoint ["/usr/sbin/init"]   #--- 启动容器时自动执行的命令,若run命令后有-c 参数,不会被替换

docker  build  -t  centos-http   .   #--- 构建镜像 ,-t 指定镜像名  .  表示当前目录,即指定dockerfile所在目录

$ docker history       #显示镜像的构建历史

$ 当出现  ADD failed: file not found in build context or excluded by .dockerignore: stat mnt/d1/f1: file does not exist 错误时   #将需要复制的文件放到当前跟dockerfile 同一目录

  注: copy时也一样  需要将文件放到更dockerfile的同目录

二、docker-compose

2.1、docker-compose安装

#从github上下载docker-compose二进制文件安装

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

#若是github访问太慢,可以用daocloud下载

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

#添加执行权限

sudo chmod +x /usr/local/bin/docker-compose

#查看版本

docker-compose --version

2.2、docker-compose命令

docker-compose up         #命令聚合每个容器的输出,命令退出时,所有容器都将停止

docker-compose up -d     #在后台启动容器并使它们保持运行

docker-compose logs -f     #查看该容器的启动的日志打印(日志从头打印)

docker logs -f container_id        #查看某一容器的启动的日志打印(日志从头打印)

docker logs -f --tail 数量 container_id       #查看某一容器的启动的日志打印(查看

最后n条日志打印)

docker-compose stop           #停止compose服务

docker-compose restart       #重启compose服务

docker-compose kill           #杀掉compose服务

docker-compose ps           #查看compose服务状态

docker-compose rm           #删除compose服务

docker-compose down           #停止并删除容器、网络、卷、镜像

docker-compose config       #检查配置

docker-compose config -q   #检查配置,有问题才输出

2.3、docker-compose.yml详解

2.3.1、Compose配置文件结构

Docker Compose配置文件是一个用于定义服务、网络和数据卷的YAML文件。其中服务定义了该服务启动的每个容器的配置,就像将命令行参数传递给docker run一样,网络和数据卷的定义类似于docker network create和docker volume create。跟docker run一样,如果在Dockerfile中通过诸如CMD、EXPOSE、VOLUME和ENV这些指令指定了相关选项,那么在默认情况下,不需要在docker-compose.yml中再次指定它们。

2.3.2、服务配置

1、服务定义了该服务启动的每个容器的配置,就像将命令行参数传递给docker run一样。比如以下配置:

services:

  redis:

    image: redis:alpine

services下的redis是用户自定义的服务名称,redis下的image只是众多服务配置项中的其中一个,意思是指定镜像名称或id。下面就对服务的相关配置项进行一个总结。

2、command

覆盖容器启动后默认执行的命令。可以写成字符串形式。例如:

command: bundle exec thin -p 3000

3、container_name

指定自定义容器的名称,而不是使用默认名称。例如:

container_name: my-web-container

因为Docker容器的名称必须唯一,所以为一个服务指定了自定义容器名称后,该服务不能进行扩展。如果尝试为该服务扩容将会导致错误。

4、env_file

从文件中获取环境变量。可以是一个值或一个列表。例如:

env_file:

  - ./common.env

  - ./apps/web.env

  - /opt/runtime_opts.env

5、environment

设置环境变量。可以使用数组或字典两种格式。任何布尔类型的值都必须用引号引起来,以便解析器将它们解释为字符串。值设置了键没设置值的环境变量可以在运行Compose的主机环境中解析它们的值,这对于使用密钥和特定于主机的值用处很大。例如:

environment:

RACK_ENV: development

SHOW: 'true'

SESSION_SECRET:

environment:

  - RACK_ENV=development

  - SHOW=true

  - SESSION_SECRET

注意:这里所说的环境变量是针对宿主机的Compose而言的,如果在服务中指定了build配置项,那么这些变量并不会进入构建过程中,如果要定义构建时用的环境变量首选build的arg子选项。

6、expose

暴露指定端口,但不映射到宿主机,只被连接的服务访问。只能指定内部端口。例如

expose:

  - "3000"

  - "8000"

7、image

指定要从中启动容器的镜像。可以写仓库/标签(repository/tag)或镜像ID。示例如下:

image: redis

image: ubuntu:18.04

image: tutum/influxdb

image: example-registry.com:4000/postgresql

image: a4bc65fd

如果镜像不存在,Compose会自动拉取镜像,除非指定了build,这种情况下会使用指定选项构建镜像并给镜像打上指定标签。

8、networks

指定所加入的网络。需要在顶层networks配置项中引入具体的网络信息。例如:

services:

  some-service:

    networks:

     - some-network

     - other-network

networks:

  some-network:

  other-network:

9、volumes

指定所挂载的主机路径或数据卷名称。支持short和long两种格式的语法。可以将主机路径作为单个服务的一部分进行挂载,而无需在顶层volumes配置项中定义。但是如果想要在多个服务之间重用数据卷,需要在顶层volumes配置项中定义一个数据卷名称。

short语法使用通用的[SOURCE:]TARGET[:MODE]格式,SOURCE可以是主机路径或数据卷名称,TARGET为挂载数据卷的容器路径,MODE可以为ro只读模式或rw读写模式(默认)。可以在主机上挂载相对路径,该路径相对于正在使用的Compose配置文件的目录进行扩展,相对路径应始终以.或..开头。例如:

volumes:

  #只指定一个路径,Docker会自动在创建一个数据卷(这个路径是容器内部的)

  - /var/lib/mysql

  #使用绝对路径挂载数据卷

  - /opt/data:/var/lib/mysql

  #使用基于Compose配置文件的相对路径作为数据卷挂载到容器

  - ./cache:/tmp/cache

  #使用基于root用户的相对路径作为数据卷挂载到容器

  - ~/configs:/etc/configs/:ro

  #使用已经存在命名的数据卷挂载到容器

  - datavolume:/var/lib/mysql

三、私有仓库harbor

3.1、安装docker-compose

3.2、配置ssl证书

mkdir -p /data/cert

        openssl genrsa -des3 -out server.key 2048

        openssl rsa -in server.key -out server.key   ---清除密钥密码

        openssl req -new -key server.key -out server.csr

        openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

        cp server.key server.key.org

        chmodcd  -R 777 /data/cert

3.3、配置harbor

vi  harbor.cfg

​      hostname = harbor.xxhf.com   ---改hostname

​    ./install  ---运行安装脚本

3.4、浏览器访问

配置静态解析文件,hosts文件中加入: 192.168.190.100 harbor.xxxx.com

访问 http://harbor.xxxx.com,登录账号 admin / Harbor12345

3.5、docker客户端测试

配置静态解析文件,hosts文件中加入:  192.168.190.100   harbor.xxxx.com

        vi /etc/docker/daemon.json

           {  ... ,   ---原内容后追加,需在后面加个 ,

              "insecure-registries": ["harbor.xxxx.com"]     ---添加信任域名

           }

        systemctl  restart docker

        docker start $(docker ps -a -q )   ---启动容器

        docker  login -u admin  harbor.xxxx.com   ---登录harbor

        docker  tag  centos:7.6.1810   harbor.xxxx.com/library/centos:7.6.1810    ---镜像名格式: 主机名或ip/项目名/镜像名:版本

        docker  push  harbor.xxxx.com/library/centos:7.6.1810   ---上传

        docker  pull  harbor.xxxx.com/library/centos:7.6.1810   ---下载

        docker  logout  harbor.xxxx.com

原文地址:https://blog.csdn.net/lijunwusino/article/details/146401755
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/595856.html

相关文章:

  • 【C#高级编程】—表达式树详解
  • k8s自动弹性伸缩之HPA实践
  • 网络编程——套接字、创建服务器、创建客户端
  • 挑战用AI替代我的工作——从抢券困境到技术突破
  • C# System.Text.Encoding 使用详解
  • 支持向量机(Support Vector Machine)基础知识1
  • 普通鼠标的500连击的工具来了!!!
  • 【AIGC】Win10系统极速部署Docker+Ragflow+Dify
  • 最新!Ubuntu Docker 安装教程
  • C 语 言 --- 扫 雷 游 戏(初 阶 版)
  • 系统思考—链接组织效能提升与问题解决
  • OSPF 协议详解:从概念原理到配置实践的全网互通实现
  • 我们如何自己去做软件的等保测评?
  • STM32U575RIT6单片机(五)
  • Python中数据结构元组详解
  • C++20 新特性:深入理解 `std::basic_string<char8_t>` 和 `char8_t`
  • C# 事件(Event)核心概念
  • 解决npm在vscode终端内无法运行
  • Elasticsearch快速上手与深度进阶:一站式实战教程
  • 什么是ETL