当前位置:   article > 正文

docker安装和常用命令_docker-compose-plugin

docker-compose-plugin

1、Docker安装

选择其中一种方式安装即可

1.1、官方脚本安装

curl -fsSL https://get.docker.com | sh
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • 1
  • 2

1.2、yum安装

yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y -q docker-ce docker-ce-cli containerd.io docker-scan-plugin docker-compose-plugin docker-ce-rootless-extras
  • 1
  • 2
  • 3

1.3、非官方脚本安装

脚本地址:https://github.com/Jrohy/docker-install/

# 选择其中一种即可
# 在线安装或更新docker
source <(curl -sL https://docker-install.netlify.app/install.sh)

# 调用官方脚本安装(get.docker.com)
source <(curl -sL https://docker-install.netlify.app/install.sh) -s

# 离线安装/更新docker
#docker.bash需要和install.sh在同一目录内
#docker-20.10.19.tgz下载: https://download.docker.com/linux/static/stable/
./install.sh -f /root/docker-20.10.19.tgz
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

启动docker

#启动
systemctl start docker

#查看版本号
docker version
  • 1
  • 2
  • 3
  • 4
  • 5

设置仓库地址,选择其中一个就行

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager --add-repo=http://mirrors.tencent.com/docker-ce/linux/centos/docker-ce.repo
  • 1
  • 2
  • 3

1.4、非root执行docker命令

可以添加docker组,并将非root账户加入到该组中。

groupadd docker
usermod -aG docker $USER
  • 1
  • 2

1.5、Window Docker Desktop安装

官网下载:https://www.docker.com/products/docker-desktop/
Windows 10 版本 2004 的内部版本 19041 或更高版本中才提供 WSL 2
安装完成后,在cmd命令下输入

# 输入命令查询版本信息
docker version
# 
Client:
 Cloud integration: v1.0.29
 Version:           20.10.21
 API version:       1.41
#.......

Server: Docker Desktop 4.15.0 (93002)
 Engine:
  Version:          20.10.21
#.......
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

docker默认镜像和数据保存路径为,避免C盘空间不足,我们需要修改为其它路径。

# docker-desktop-data
C:\Users\peng\AppData\Local\Docker\wsl\data\ext4.vhdx
# docker-desktop
C:\Users\peng\AppData\Local\Docker\wsl\distro\ext4.vhdx
  • 1
  • 2
  • 3
  • 4

1、首先我们右键点击右下角鲸鱼图标退出Docker,等待Docker完全退出后
2、使用以下的命令来查询当前docker的状态

wsl -l -v --all
# 显示如下内容
  NAME                   STATE           VERSION
* docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2
  • 1
  • 2
  • 3
  • 4
  • 5

3、使用以下的命令将上面的两个系统导出来

wsl --export docker-desktop E:\docker\docker-desktop.tar
wsl --export docker-desktop-data E:\docker\docker-desktop-data.tar
  • 1
  • 2

4、上面导出完成后,就需要注销掉之前的,使用以下的命令注销

wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
  • 1
  • 2

5、重新创建WSL系统

wsl --import docker-desktop E:\docker\distro\ E:\docker\docker-desktop.tar --version 2
wsl --import docker-desktop-data E:\docker\data\ E:\docker\docker-desktop-data.tar --version 2
  • 1
  • 2

6、重新启动 Docker Desktop 完成。

2、Docker镜像操作

2.1、搜索镜像

# 搜索存放在 Docker Hub 中的镜像
docker search tomcat
# 列出前5个镜像
docker search --limit 5 tomcat
  • 1
  • 2
  • 3
  • 4

2.2、下载镜像

# 不清楚具体的版本号,可以去docker hub中查询https://hub.docker.com/
docker pull imageName:tag
# 会从Docker Hub中的java仓库下载最新版本的Java镜像
docker pull java
#从指定的 Docker Registry 中下载标签为 8 的 Java 镜像
docker pull daocloud.io/library/java:8u40-b09
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.3、列出本地镜像

# 表示列出本地所有镜像
docker images 	 	 
# 表示列出本地所有镜像+历史映像层
docker images -a	 
# 表示列出本地镜像I
docker images -q     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.4、删除镜像

#  删除指定镜像
docker rmi 镜像名或者镜像ID    
# 强制删除镜像(如果某个镜像被容器使用则只能强制删除)
docker rmi -f imageID   
#  删除多个镜像
docker rmi -f ubuntu:15.10 ubuntu:16.10
# 删除全部镜像
docker rmi -f `docker images -qa`   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.5、保存镜像

#将正在运行的docker容器打包成image镜像 
docker commit centos2 centos-vim:8

# -o 参数后面跟要把镜像保存的文件路径和名称
docker save -o centos8.tar centos:8
  • 1
  • 2
  • 3
  • 4
  • 5

2.6 加载镜像

# -i 参数后面跟要加载的文件路径和名称
docker load -i centos8.tar
  • 1
  • 2

3、Docker容器操作

3.1、容器创建、启动、停止、删除

# 启动交互式容器
$ docker run -it ubuntu:20.04 /bin/bash
# 启动后台运行容器
$ docker run -d 镜像名 /bin/bash
# 指定容器名
$ docker run -it --name="容器名" -p 91:80 -v /usr/local/myhtml:/usr/local/myhtml nginx /bin/bash
#	--name="容器名"
#	-d:后台运行容器并返回容器ID
#	-i:以交互模式运行容器,通常与-t同时使用
#	-t:为容器重新分配一个伪输入终端
#   -p 宿主机端口:容器端口,主机和容器端口映射
#   -v 宿主机目录:容器目录,目录映射,selinux会禁掉权限,需要添加参数--privileged=true

# 停止容器
$ docker stop 容器名或容器ID
#强制停止
$ docker kill 784fd3b294d7 
# 启动容器已停止的容器
$ docker start 容器名或容器ID
# 重启容器
$ docker restart 容器名或容器ID
# 删除已停止的容器
docker rm 容器名或容器ID
# 对于正在运行的窗口需要加-f强制删除,强制删除所有容器
docker rm -f $(docker ps -a -q)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

3.2、查看容器

docker ps		# 表示列出当前正在运行的容器
docker ps -a	# 表示列出当前所有正在运行的容器+历史上运行过的容器
docker ps -l	# 表示显示最近创建的容器(显示最近的一个容器)
docker ps -n 5	# 表示显示最近n个创建的容器(显示最近5个创建的容器)
docker ps -q	# 表示静默模式,只显示容器编号
  • 1
  • 2
  • 3
  • 4
  • 5

3.3、退出容器

# 输入exit退出
$ docker run -it ubuntu:20.04 /bin/bash
$ exit # 交互式下exit退出
$      # 快捷键ctrl+q+p退出
  • 1
  • 2
  • 3
  • 4

3.4、停止容器

$ docker stop 容器名或容器ID
$ docker kill 784fd3b294d7 #强制停止
  • 1
  • 2

3.5、进入运行的容器

# 使用新的终端进入容器,exit退出,不会关闭容器。
$ docker exec -it 容器ID或者容器名 /bin/bash
# 进入容器,exit退出,会关闭容器。
$ docker attach 容器ID或者容器名
  • 1
  • 2
  • 3
  • 4

3.6、容器和主机相互拷贝文件

# 容器文件拷到主机
$ docker cp 容器ID:容器内路径  目的主机路径
# 主机文件拷到容器
$ docker cp 目的主机路径 容器ID:容器内路径
  • 1
  • 2
  • 3
  • 4

3.7、导出、导入容器

# 导出容器并保存为tar压缩包
$ docker export 容器ID > xxxx.tar
# 导入容器和创建镜像
$ docker import nginx2.tar nginx
  • 1
  • 2
  • 3
  • 4

3.8、查看容器信息

$ docker inspect 容器ID或者容器名
  • 1

3.9、查看容器内运行的进程

$ docker top 容器ID或者容器名
  • 1

3.10、查看容器日志

$ docker logs 容器ID或者容器名
  • 1

3.11、查看端口映射

$ docker container port nginx
  • 1

4、docker-compose安装

docker-compose分为插件版本(docker-compose-plugin)和独立版本(docker-compose-plugin)
选择其中一个安装即可

4.1、docker-compose-plugin安装

官方安装教程:https://docs.docker.com/compose/install/linux/

# yum安装
yum update
yum install docker-compose-plugin

# 安装完成后查看版本号
docker compose version
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.2、docker-compose独立安装

官方安装教程:https://docs.docker.com/compose/install/other/

curl -SL https://github.com/docker/compose/releases/download/v2.13.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  • 1
  • 2

4.3、docker-compose常用命令

命令说明:https://docs.docker.com/compose/reference/
插件版本和独立版本命令调用方式不同

# docker-compose-plugin查看版本号
$ docker compose version

# docker-compose独立版本查看版本号
$ docker-compose version
  • 1
  • 2
  • 3
  • 4
  • 5

常用命令

# 查看配置命令
$ docker compose config

# 构建并后台启动
$ docker compose up -d

# 将会停止UP命令启动的容器,并删除容器
$ docker compose down 

#重新启动nginx容器
$ docker compose restart 

# 启动已存在的容器命令
$ docker compose start

# 停止正在运行的容器命令
$ docker compose stop

#暂停容器
$ docker compose pause               
 
# 恢复容器
$ docker compose unpause

# 构建镜像
$ docker compose bulid

# 下载镜像
$ docker compose pull

# 删除容器
$ docker compose rm 

# 查看运行的镜像
$ docker compose ps

# 查看进程
$ docker compose top

# 查看服务日志输出
$ docker compose logs
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

4.4、Docker-Compose模板文件

Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。 Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。

image
image是指定服务的镜像名称或镜像ID

services: 
    web: 
        image: hello-world 
  • 1
  • 2
  • 3

build
利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。

build:
  context: ../
  dockerfile: path/of/Dockerfile 
  • 1
  • 2
  • 3

command
使用command可以覆盖容器启动后默认执行的命令。

command: bundle exec thin -p 3000
  • 1

container_name
指定自定义容器名称

container_name: app
  • 1

depends_on
表示服务之间的依赖关系。

version: "3"
services:
  web:
    build: .
    depends_on:
      - redis
  redis:
    image: redis

#docker compose up:按依赖顺序启动服务,redis在web之前启动。
#docker-compose stop:按依赖顺序停止服务,web在redis之前停止。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

pid
将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。

pid: "host"
  • 1

ports
映射端口

ports:
 - "8000"
 - "49022:22"
 - "127.0.0.1:8001:8001"
  • 1
  • 2
  • 3
  • 4

extra_hosts
添加主机名映射。使用与docker客户端–add-host类似

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"
  • 1
  • 2
  • 3

volumes
目录映射,可以直接使用 [主机:容器]格式,或者使用[主机:容器:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。

volumes:
  # 只指定一个路径,Docker会自动在创建一个目录。
  - /var/lib/mysql
  # 主机使用绝对路径和容器目录映射
  - /opt/data:/var/lib/mysql
  # 以Compose配置文件的目录为中心的相对路径和容器目录映射
  - ./cache:/tmp/cache
  # 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
  - ~/configs:/etc/configs/:ro
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

dns
自定义DNS服务器。

dns:8.8.8.8
dns:
    - 8.8.8.8    
    - 9.9.9.9
  • 1
  • 2
  • 3
  • 4

dns_search
配置DNS搜索域。

dns_search:example.com
dns_search:
    - domain1.example.com
    - domain2.example.com
  • 1
  • 2
  • 3
  • 4

entrypoint
设置入口命令

entrypoint: /code/entrypoint.sh
entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"]
entrypoint: java -jar penngo_test.jar
  • 1
  • 2
  • 3

env_file
从文件添加环境变量

env_file: .env
env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/runtime_opts.env
  • 1
  • 2
  • 3
  • 4
  • 5

environment
添加环境变量。

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

external_links
链接到docker-compose.yml外部的容器

external_links:
  - redis_1
  - project_db_1:mysql
  - project_db_1:postgresql
  • 1
  • 2
  • 3
  • 4

cap_add
增加指定容器的内核能力(capacity)。

cap_add:
    - ALL
  • 1
  • 2

cap_drop
去掉指定容器的内核能力(capacity)。

cap_drop:
    - NET_ADMIN
  • 1
  • 2

cgroup_parent
创建了一个cgroup组名称为cgroups_1:

cgroup_parent: cgroups_1
  • 1

devices
指定设备映射关系

devices:
    - "/dev/ttyUSB1:/dev/ttyUSB0" 
  • 1
  • 2

expose
暴露端口,但不映射到宿主机,只允许能被连接的服务访问。

expose:
    - "3000"
    - "8000" 
  • 1
  • 2
  • 3

labels
为容器添加Docker元数据(metadata)信息。

labels:
- "com.example.description=Accounting webapp"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
  • 1
  • 2
  • 3
  • 4

links
链接到其它服务中的容器

links:
    - db
    - db:database
    - redis
  • 1
  • 2
  • 3
  • 4

log_driver
指定日志驱动类型。目前支持三种日志驱动类型:

log_driver: "json-file"
log_driver: "syslog"
log_driver: "none" 
  • 1
  • 2
  • 3

log_opt
日志驱动的相关参数。

net
设置网络模式。

net: "bridge"
net: "none"
net: "host"
  • 1
  • 2
  • 3

5、清理空间

# 查看Docker的磁盘使用情况
docker system df
# 清理磁盘,删除关闭的容器、无用的数据卷和网络
docker system prune -a

# 批量删除
docker image prune     # 删除悬空的镜像
docker container prune # 删除无用的容器
docker volume prune    # 删除无用的卷
docker network prune   # 删除无用的网络

# 手动删除镜像
#1、删除所有悬空镜像,不删除未使用镜像:
docker rmi $(docker images -f “dangling=true” -q)
#2、删除所有未使用镜像和悬空镜像
docker rmi $(docker images -q)

# 手动删除卷
#如果卷占用空间过高,可以清除一些不使用的卷,(-v 详细信息中若显示 LINKS = 0,则是未被调用):
#删除所有未被容器引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)

# 手动删除容器
# 删除所有已退出的容器:
docker rm -v $(docker ps -aq -f status=exited)
# 删除所有状态为dead的容器
docker rm -v $(docker ps -aq -f status=dead)

# 查找系统中的大文件,查找指定目录下所有大于100M的所有文件
find /var/lib/docker/overlay2/ -type f -size +100M -print0 | xargs -0 du -h | sort -nr

# 对标准输入日志大小与数量进行限制
# 新建或修改/etc/docker/daemon.json,添加log-dirver和log-opts参数
vi /etc/docker/daemon.json
{
    "log-driver":"json-file",
    "log-opts": {"max-size":"3m", "max-file":"1"},
    "registry-mirrors":[
	    "https://hub-mirror.c.163.com",
	    "https://registry.aliyuncs.com",
	    "https://registry.docker-cn.com",
	    "https://docker.mirrors.ustc.edu.cn"
  	]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/255940
推荐阅读
相关标签
  

闽ICP备14008679号