四川建设厅网上查询网站,长春房产,国内优秀企业网站,浏览器主页网址推荐目录 一、Docker
#xff08;一#xff09;Docker基础命令
#xff08;二#xff09;docker镜像命令
#xff08;三#xff09;docker容器命令
#xff08;四#xff09;docker运维命令 一、Docker
容器是一种虚拟化技术#xff0c;容器是镜像实例…目录 一、Docker
一Docker基础命令
二docker镜像命令
三docker容器命令
四docker运维命令 一、Docker
容器是一种虚拟化技术容器是镜像实例化对象就像Java编译后Class构造出的一个个实例对象本文除了生硬命令大全还会穿插一些个人对docker的理解。
什么是 Docker? - 知乎
一Docker基础命令
1.docker程序操作
1启动docker
systemctl start docker
2停止docker
systemctl stop docker
3重启docker
systemctl restart docker
4随服务启动而自启
systemctl enable docker
5查看运行状态
systemctl status docker
6查看docker版本号信息
docker info
docker version 2.docker帮助命令
使用场景忘记docker命令参数有哪些
docker --helpdocker pull --help
docker push --help 二docker镜像命令
1.查看镜像
使用场景查看当前服务器中docker 镜像列表
docker images 2.搜索镜像
使用场景查找可安装的镜像和版本
docker search 镜像名docker search chrome
镜像名、描述、关注star数量、是否官方 搜索筛选条件
例如筛选stars数量在大于50的镜像
docker search --filterSTARS50 chrome 3.拉取镜像
使用场景从docker hub或公司内部镜像hub下载镜像到本地
docker pull 镜像名称:tag
备注没有tag默认拉取最新等同于 docker pull mysql:latest 4.运行镜像
使用场景拉取一个mysql镜像运行镜像容器
docker pull mysqldocker run -it -d --name testmysql -p 8081:8080 mysql:latest
参数说明
参数说明-it与容器进行交互式启动-d 可后台运行容器--name给运行的容器自定义命名-p 端口映射 -p 宿主机端口:容器内端口 --restartalways自启动容器5.容器操作
1停止容器
docker stop 容器ID 或 容器名称
2启动容器
docker start 容器ID 或 容器名称
3重启容器
docker restart 容器ID 或 容器名称
4删除容器
docker rm -f 容器ID 或 容器名称
删除容器前需要先停止容器运行中的容器无法删除。 6.删除镜像
docker rmi -f 镜像ID/镜像名称
删除多个镜像
docker rmi -f 镜像ID/镜像名称 镜像ID/镜像名称 镜像ID/镜像名称
强制删除镜像
docker image rm 镜像ID/镜像名称 7.保存镜像
使用场景想将本地镜像保存为tar压缩文件方便用于镜像转移至其他机子上并 加载这个保存的镜像。
docker save 镜像ID/镜像名称 -o 镜像保存位置路径
例如保存mysql镜像到当前路径位置文件名为mysql-20230314.tar
docker save mysql -o ./mysql-20230314.tar
8.加载镜像
使用场景保存的镜像文件进行加载恢复解压tar文件
docker load -i ./mysql-20230314.tar
我们把解压的镜像 run下
docker run mysql-20230314 9.镜像标签 tag
使用场景有时候我们需要对一个已有的镜像进行分类或者版本迭代相对已有的镜像进行打标签标注版本。 docker tag 源镜像名:原tag 新镜像名:新tag
例如将mysql最新版打tag为测试环境1.0.0
docker tag mysql:latest mysql:test-1.0.0 三docker容器命令
1.查看正在运行的容器
使用场景
docker ps
2.查看所有容器含已停止的容器 docker ps -a
3.运行一个容器
docker run -it -d --name 容器名称 -p 宿主机端口号:容器端口号 镜像名:tag /bin/bash
例如 拉取mysql镜像并启动一个mysql 把它取别名为mysql-test 并交互式运行
docker pull mysql:7.5.0docker run -it -d --name mysql-test -p 8081:8080 mysql:7.5.0 /bin/bash
备注宿主机 端口有时候可能被占用需要查看端口占用 情况。 linux
netstat -untlp mac
lsof -i tcp:8080
杀进程
kill -9 进程号
每个容器都是独立安全应用并相互隔离容器与宿主机端口建立绑定关系容器端口映射那么访问宿主机的该端口就可以访问到对应容器。 4.端口映射
使用场景拉取镜像运行容器设置容器端口和宿主机端口映射关系。
例如
启动mysql镜像容器命名为mysql-test 映射宿主机端口8081和容器端口8080当 我们访问8081相当于访问到容器mysql-test
docker run -it -d --name mysql-test -p 8081:8080 mysql:latest /bin/bash 容器端口如果被其他容器占用如何修改
方式一进入容器内修改配置文件
docker exec -it 容器ID/容器名词词 /bin/bash
方式二进入容器内
docker attach 容器ID/容器名称 /bin/bash 进入容器内部后退出容器内部
exit
1启动容器
docker start 容器ID/容器名称
2停止容器
docker stop 容器ID/容器名称
3重启容器
docker restart 容器ID/容器名称
4杀掉容器
docker kill 容器ID/容器名称 5.容器文件拷贝
使用场景
容器内部拷出文件
docker cp 容器ID:容器内部路径 容器外部路径
容器外部拷入文件
docker cp 容器外部路径 容器ID:容器内部路径 6.查看容器日志
使用场景
docker logs -f --tail日志数量 容器ID/容器名称
docker logs -f --tail10 ef4ccceb9b6b
docker logs --tail10 ef4ccceb9b6b 7.容器数据挂载
使用场景以防容器销毁删除造成数据丢失将容器内数据挂载到宿主机对应位置
-v 宿主机文件存放位置:容器内文件位置
如此操作就将容器内指定文件 挂载 宿主机对应位置-v可多次使用即一个容器可同时挂载多个文件到宿主机上。 12.更换容器名称
使用场景容器已启动不想删除重启容器情况下进行容器重命名。
docker rename 容器ID 新容器名称 13.修改容器配置
使用场景不想删除容器又想让容器配置变更。
例如
修改参数设置开机启动。
docker update --restartalways 容器ID或容器名称
docker container update --restartalways 容器ID或容器名称 14.提交一个镜像
使用场景在已有镜像基础上做了一些修改希望保存封装成一个新的镜像。
docker commit -m”提交信息“ -a”作者信息“ 容器ID/容器名称 提交后的新镜像名称:tag 15.dockerfile
1环境变量
在dockerfile中定义系统环境变量名和值在项目代码中通过获取环境变量函数来接收参数变量获取系统环境变量名的值)
FROM python:3.7.4
MAINTAINER jack
ENV webhook_urlhttps://oapi.dingtalk.com/robot/send?access_tokenxxx
ENV secret_tokenxxx
ENV check_interval60
ENV db_usernameroot
ENV db_passwordabc123456
ENV db_host127.0.0.1
ENV db_port3306
ENV db_nametonghuashun
COPY . /tonghuashun
workdir /tonghuashun
run pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
cmd [python,main.py]
run和cmd区别
触发时机不同
RUN 在构建镜像时 即docker build
CMD 在运行容器时打完镜像后运行容器时即docker run 在Python项目代码中获取环境变量
import os
EN_DB_USERNAMEos.getenv(db_username)
EN_DB_PASSWORDos.getenv(db_password)
EN_DB_HOSTos.getenv(db_host)
EN_DB_PORTos.getenv(db_port)
EN_DB_NAMEos.getenv(db_name)
在NodeJS项目代码中获取环境变量
process.env.NODE_ENV //获取对应环境变量的值
在Golang项目代码中获取环境变量
package main
import ( fmt os)
func main() { name : os.Getenv(NAME) fmt.Println(name is:, name)} 2docker run时传入环境变量参数
docker run -p 9000:9000 -e environmentdev -e cluster0 -d me/app 3其他 FROM nginx:1.20.0
COPY nginx.conf /etc/nginx/nginx.conf
COPY dist/ /usr/share/nginx/html/
COPY replace.sh /
RUN chmod 777 /replace.sh
CMD [/replace.sh]
COPY 当前dockerfile目录 的文件名 nginx.conf、文件夹dist、文件replace.sh 复制到容器指定目录中。
RUN 在docker build时运行 打镜像时
CMD 在docker run时运行运行容器时 16.docker-compose docker-compose.yml 文件分为三个主要部分services、networks、volumes
services主要用来定义各个容器networks定义需要使用到的networkvolumes定义services使用到的volume 本地数据卷参数说明
参数说明version 版本build 使用当前目录下的Dockerfile进行构 image 指定运行容器使用的镜像 container_name 默认运行出来的容器名称command 覆盖容器启动后默认执行的命令Dockerfile定义的CMD 注意当Dockerfile定义了entrypoint的时候docker-comose.yml定义的command会被覆盖 enrtypoint 执行命令行可以覆盖Dockerfile中定义的entrypoint命令 links 链接到其它服务中的容器。 使用服务名称同时作为别名或服务名称服务别名 SERVICE:ALIAS 格式都可以 例如 version: 3 services: order-service links: - user-service - pay-service - redis external_links 链接到 docker-compose.yml 外部的容器参数格式跟 links 类似。 prot 暴露容器端口信息 expose 指定内部端口但不映射到宿主机只被连接的服务访问。 enviroment 定义的变量会覆盖.env文件中定义的重名环境变量。 ports 将容器的端口80映射到宿主机的端口8080 volumes 设置容器的数据卷路径 networks 容器使用的网络设置。 depends_on 基于云镜像 基于本地dockerfile
version: 3
services:web:build:context: ./dockerfile: mydockerfile
完整示例
version: 3.8
networks:test_network:external: true
services:myapidemo:image: 1312958948/myapidemo:1.1container_name: myapidemobuild: .restart: alwaysports:- 9020:5000volumes:- /root/apilogs/logs:/app/logsnetworks:- test_networknginxapi:image: nginxcontainer_name: nginxapirestart: alwaysports:- 80:80- 443:443volumes:- /root/nginx/www:/usr/share/nginx/html - /root/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf - /root/nginx/logs:/var/log/nginx - /root/nginx/certs:/etc/nginx/certs networks:- test_networkmysql:image: mysql:8.0container_name: mysqlrestart: alwaysports:- 3306:3306 volumes: - /var/lib/docker/volumes/mysqldata/_data:/var/lib/mysql39environment:MYSQL_ROOT_PASSWORD: Aa123456 MYSQL_DATABASE: MyTestTZ: Asia/Shanghainetworks:- test_network redistest:image: rediscontainer_name: redistestrestart: alwaysports:- 6379:6379command: redis-server --requirepass 123456 networks:- test_network 四docker运维命令
1.查看docker工作目录
sudo docker info | grep ”Docker Root Dir“
2.查看docker磁盘占用总体情况
du -hs /var/lib/docker
3.查查看docker磁盘使用具体情况
docker system df
4.删除无用容器和镜像
1删除异常停止的容器
docker rm docker ps -a | grep. Exited | awk {print $1}
5.查找大文件
find / -type f -size 100M -print0 | xargs -0 du -h |sort -nr
6.查找指定docker使用目录下大于指定大小文件
例如
这边查查查找到事‘/var/lib/docker/overlay2/*’开头且文件大小大于100MB的文件
find / -type f -size 100M -print0 | xargs -0 du -h |sort -nr | grep ‘/var/lib/docker/overlay2/*’