docker常用命令

目录

1、镜像

2、容器

3、网络

4、数据卷

5、docker-compose

6、Docker启动MySQL示例


1、镜像

分类 功能 备注 命令
镜像首页 https://hub.docker.com/
镜像 下载镜像 docker pull 软件名
查询本机已有镜像 docker images
保存镜像为压缩包(单个镜像) -o:输出到的文件
docker save tomcat:9.0.20-jre8-alpine -o tomcat9.tar docker save tomcat:9.0.20-jre8-slim > tomcat9.slim.tar
docker save 软件名:TAG -o 文件名
保存镜像为压缩包(多个镜像) docker save \
ubuntu:20.04 \
alpine:3.12.1 \
debian:10.6-slim \
centos:7.8.2003 \
-o linux.tar
将压缩包还原为镜像 -i:指定导入的文件
docker load -i linux.tar
docker load < tomcat9.0.20.tar
docker load -i 压缩包名
删除一个镜像(软件名:TAG) -f, -force : 强制删除镜像,即便有容器引用该镜像;
-no-prune : 不要删除未带标签的父镜像;
docker rmi tomcat:9.0.20-jre8-alpine
docker image rm tomcat:9.0.20-jre8-alpine
docker rmi 软件名:TAG
批量删除镜像 -f,-force : 强制删除镜像,即便有容器引用该镜像; docker rmi -f $(docker images | grep "xxx" | awk '{print $3}') //其中xxx为关键字
删除一个镜像(ID) id重复时,删除失败(image的ID在终端长度未完全显示,ID值会出现重复) docker rmi ee7cbd482336
获取镜像的详细信息 docker inspect 软件名:TAG
查看镜像各个层的创建信息 docker history 软件名:TAG
重新标记本地镜像 docker tag tomcat:9.0.20-jre8-alpine lagou/tomcat:9 docker tag old软件名:TAG new软件名:TAG
清理镜像 -a, --all : 删除所有没有用的镜像,而不仅仅是临时文件;
-f, --force :强制删除镜像文件,无需弹出提示确认;
docker image prune
镜像推送 docker push harbor.xnunion.com/algplat/one/image:1.1

2、容器

功能 备注 命令
容器 容器可以理解成一个极小型的虚拟机(是镜像实例)
新建并启动容器(run) -d, --detach=false: 后台运行容器,并返回容器ID
-i, --interactive=false: 以交互模式运行容器,通常与 -t 同时使用
-P, --publish-all=false: 随机端口映射,容器内部端口随机映射到主机的端口。不推荐各位小伙伴
使用该参数
-p, --publish=[]: 指定端口映射,格式为:主机(宿主)端口:容器端口,推荐各位小伙伴们使用
-t, --tty=false: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name="nginx-lb": 为容器指定一个名称
-h , --hostname="laosiji": 指定容器的hostname
-e , --env=[]: 设置环境变量,容器中可以使用该环境变量
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
--link=[]: 添加链接到另一个容器(容器间可通过容器名进行交互,而不用再通过ip进行交互);不推荐各位小伙伴使用该参数
-v, --volume : 绑定一个数据卷
--privileged=false: 指定容器是否为特权容器,特权容器拥有所有的capabilities
--restart=no:指定容器停止后的重启策略
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启,推荐各位小伙伴们使用
--rm=false: 指定容器停止后自动删除容器,不能以docker run -d启动的容器
前台运行:docker run -it --rm tomcat:latest
后台运行:docker run -itd --name tomcat9 -p 8888:8080 tomcat:latest

--name:为当前启动的容器起别名
将容器8080端口与主机8888端口映射,即可通过主机ip:8888访问容器内tomcat
查看容器log日志 -f : 跟踪日志输出
--tail :仅列出最新N条容器日志
docker logs -f 容器别名
查看运行的容器 -a :显示所有的容器,包括未运行的。
-q :只显示容器编号。
docker ps
创建容器但不启动(create) 参数与run命令类似 docker create -it --name tomcat9 -p 8888:8080 tomcat:latest
启动容器 按容器名称/id进行启动 docker start 容器别名
停止容器 按容器名称/id进行启动 docker stop 容器别名
重启容器 按容器名称/id进行启动 docker restart 容器别名
更新容器(不成熟) 多个容器别名/id间用空格分割 docker update --restart always 容器名称/容器id
杀掉容器 杀掉一个运行中的容器 docker kill 容器别名/容器id
删除容器 按容器名称/id进行删除
-f :通过 SIGKILL 信号
强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
docker rm 容器别名
从虚拟机进入容器 进入容器内部,查看相关目录接口,修改配置
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
有bash命令的linux:docker exec -it 容器id /bin/bash
无bash命令的linux:docker exec -it 容器id sh
获取容器的详细信息 -f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
docker inspect 容器名
实用技巧 停止所有运行容器 docker stop $(docker ps -qa)
删除所有的容器
docker rm $(docker ps -aq)
docker rm $(docker stop $(docker ps -q))
删除所有的镜像 docker rmi $(docker images -q)

3、网络

功能 备注 命令
docker网络 docker网络帮助 docker network --help
查看docker网络类型 在docker初始化时,会自动创建bridge、host、none三种网络 docker network ls
查看docker网络详细信息 1、docker在宿主机虚拟一个docker容器网桥;
2、启动容器时,根据网桥的桥段分配一个ip地址(Container-ip);
3、容器间可通过Container-ip直接通信;
4、外部网络可通过映射容器端口到宿主主机端口进行访问。    -p
docker info
查询所有bridge网络 brctl show
docker网络模式(了解即可,偏运维) host模式、Container模式、none模式、bridge模式(默认)、Macvlan
network模式、Overlay模式
查看具体网络详情 重点在于查询结果的Containers内容,会显示bridge网络下的容器网络信息。
docker network inspect bridge
docker network inspect 网络名称
容器间连接(--link:已不推荐)
可通过新建一个bridge网络的方式替代--link
容器启动时,可通过--link连接到另一个容器,如下所示,nginx2可通过nginx1容器名直接连接到nginx1(单向连接),而不用再通过ip进行连接。
docker run -itd --name nginx2 
--link nginx1 nginx:1.19.3-alpine
#NAME?
新建网络 docker network create -d bridge lagou-bridge
新建网络后,可通过容器名称进行多个容器之间的互访。

自定义的网卡可以在容器之间提供自动的 DNS 解析。
-d, --driver string 指定网络的驱动(默认 "bridge")
--subnet strings 指定子网网段(如192.168.0.0/16、172.88.0.0/24)
--ip-range strings 执行容器的IP范围,格式同subnet参数
--gateway strings 子网的IPv4 or IPv6网关,如(192.168.0.1)
docker network create [OPTIONS] 网络类型 网络名
docker network create -d 网络类型 网络名
网络连接与断开 docker network connect lagou-bridge nginx2 docker network connect/disconnect 网络名 容器名
删除网络 docker network rm lagou-bridge docker network rm 网络名
docker安装ping相关命令 apt update && apt install -y iproute2 && apt install -y net-tools && apt install -y iputils-ping

4、数据卷

功能 备注 命令
数据卷 定义 实现容器数据的持久化,不随容器的删除而消失。
在使用docker容器的时候,产生的一系列数据文件。

宿主机的数据卷是可供多个容器使用的特殊目录,将主机操作系统目录直接映射进容器。
简化docker cp命令,实现容器数据的持久化。
docker官网推荐通过run挂在数据卷而非通过create/start创建启动容器时挂载。
docker官网推荐进行目录挂载而不是文件挂载。
特点 1. 数据卷可以在容器之间共享或重用数据
2. 数据卷中的更改可以立即生效
3. 数据卷中的更改不会包含在镜像的更新中
4. 数据卷默认会一直存在,即使容器被删除
5. 数据卷的生命周期一直持续到没有容器使用它为止
主机与容器间的数据拷贝 -L :保持源目标中的链接

docker cp /data/index.html nginx:/usr/share/nginx/html/index.html
宿主机文件复制到容器内
docker cp [OPTIONS] 宿主机文件路径 容器名:容器文件路径
容器内文件复制到宿主机
docker cp [OPTIONS] 容器名:容器文件路径 宿主机文件路径
数据卷三种类型 使用数据卷后,容器内文件的修改都会保存到宿主机的映射文件中。
1. 
宿主机数据卷:直接在宿主机的文件系统中但是容器可以访问(bind mount)
2. 命名数据卷:磁盘上Docker管理的数据卷,但是这个卷有个名字。
3. 匿名数据卷:磁盘上Docker管理的数据卷,因为没有名字想要找到不容易,Docker来管理这些文件。

第一种是在宿主机内的特定(指定)目录下,而后两种则在docker管理的目录下,这个目录一般是 /var/lib/docker/volumes/
宿主机容器卷(数据卷):bind mounts     如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。(容器目录cp到数据卷目录)
    如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录会显示数据卷中的数据。(数据卷目录cp到容器目录)
docker run -v /宿主机绝对路径目录:/容器内目录 镜像名
容器目录权限 通过 -v 容器内路径: ro rw 改变读写权限
ro:readonly 只读
rw:readwrite 可读可写
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
docker run -it -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
例如:
    docker run -d -P --name nginx05 -v lagouedu1:/etc/nginx:ro nginx
    docker run -d -P --name nginx05 -v lagouedu2:/etc/nginx:rw nginx ro
只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
nexus3挂载数据卷(权限问题) 某些容器挂载数据卷时,需要对数据卷目录赋予权限。
docker pull sonatype/nexus3:3.28.1
1、运行容器
docker run -d -p 8081:8081 --name nexus3 sonatype/nexus3:3.28.1
2、进入容器查找初始化密码
docker exec -it nexus3 /bin/bash
cd /nexus-data/
cat admin.password
3、浏览器端访问 http://192.168.198.100:8081/
4、查看官网说明文档,需要为挂载目录授权(
舍去这一步可能导致容器启动失败)
chown -R 200 nexus3/
5、运行容器
docker run -d -p 8081:8081 --name nexus3 -v /data/nexus3/:/nexus-data/ sonatype/nexus3:3.28.1
命名数据卷 -v为容器指定数据卷时,不指定路径,而是指定一个名字。
docker run -itd --name nginx -p 80:80 -v 
lagouedu-nginx:/etc/nginx nginx:1.19.3- alpine
1、查看docker数据卷 docker volume ls
2、查看lagouedu-nginx宿主机目录 docker volume inspect lagouedu-nginx
3、进入docker数据卷默认目录 cd /var/lib/docker/volumes/lagouedu-nginx
4、查看文件 ls
   所有的文件docker默认保存在_data目录中 cd _data
匿名数据卷 -v不指定路径及名字,直接关联容器内目录。
docker run -itd --name nginx -p 80:80 -v /etc/nginx nginx:1.19.3-alpine
1、查看docker数据卷 docker volume ls
2、查看宿主机目录docker volume inspect dbd07daa4e40148b11....
3、进入docker数据卷默认目录 cd /var/lib/docker/volumes/dbd07daa4e40148b11....
4、查看文件 ls
   所有的文件docker默认保存在_data目录中 cd _data
清理数据卷 docker volume prune
数据卷容器 数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
使用一个特定的容器作为数据卷容器,该容器通过-v与宿主机进行挂载;
其余的容器通过--volumes-from与数据卷容器进行挂载。
举例:
docker pull centos:7.8.2003
docker pull nginx:1.19.3-alpine
docker pull mysql:5.7.31
1、运行数据卷容器,并挂载到宿主机
docker run -d --name 
data-volume -v /data/nginx:/usr/share/nginx/html -v /data/mysql:/var/lib/mysql centos:7.8.2003
2、运行mysql容器,挂载到数据卷容器
docker run -itd --name mysql01 --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin 
--volumes-from data-volume mysql:5.7.31 -- character-set-server=utf8 --collation-server=utf8_general_ci
3、运行nginx容器,挂载到数据卷容器
docker run -itd --name nginx01 -p 80:80 
--volumes-from data-volume nginx:1.19.3- alpine

5、docker-compose

功能 备注 命令
docker compose 定义 定义和运行一个或多个容器,简化镜像的构建以及容器的运行。
    
使用YAML文件定义多容器之间的关系。一个 docker-compose up 就可以把完整的应用跑
起来。 本质上, compose 把 YAML 文件解析成 docker 命令的参数,然后调用相应的 docker 命令行接口,从而将应用以容器化的方式管理起来。它通过解析容器间的依赖关系顺序地启动容器。而容器间的依赖关系由 YAML 文件中的 links 标记指定。


举个例子,如果一个项目需要运行8个容器:
一种方式是手动一个一个docker run去启动这些容器;
另一种方式就是使用docker compose,定义多容器间的关系,从而使用一条命令完成部署。
安装 下载地址:https://github.com/docker/compose   (二进制文件)
将docker-compose二进制文件放到
/usr/local/bin/docker-compose 目录下
    mv /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
    cp /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
授权:   
    chmod +x /usr/local/bin/docker-compose
    开发环境可以授予最高权限
    chmod 777 /usr/local/bin/docker-compose
卸载 直接删除二进制文件即可
yml配置文件 IDEA的docker插件:https://plugins.jetbrains.com/plugin/7724-docker/versions
1、默认使用文件名 docker-compose.yml。当然,也可以使用 -f 参数指定具体文件。
2、YAML 文件包含 4 个一级 key:version、services、networks、volumes

version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是
API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号。

services 用于定义不同的应用服务。Docker Compose 会将每个服务部署在各自的容器中。

networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。

volumes 用于指引 Docker 来创建新的卷。
启动与停止 启动:docker-compose up -d
      docker-compose -f docker-compose.yml路径 up -d
停止:docker-compose down
docker-compose常用命令 启动服务:docker-compose up -d
停止服务:docker-compose down
列出所有运行容器:docker-compose ps
查看服务日志:docker-compose logs
构建或者重新构建服务:docker-compose build
启动服务:docker-compose start
停止已运行的服务:docker-compose stop
重启服务:docker-compose restart

6、Docker启动MySQL示例

功能 备注 命令
MySQL 运行mysql镜像 -e:设置环境变量
MYSQL_ROOT_PASSWORD=admin  设置root用户密码为admin
docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin mysql:5.7.31 --character-set-server=utf8 --collation-server=utf8_general_ci
运行mysql镜像(使用数据卷) docker run -itd --name mysql --restart always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -v /root/lagoustudy/docker/data/mysql:/var/lib/mysql mysql:5.7.31
进入mysql容器 docker exec -it mysql bash
在mysql容器内登录mysql客户端 mysql -uroot -p

你可能感兴趣的:(运维,docker,容器)