docker命令

Posted FanF

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker命令相关的知识,希望对你有一定的参考价值。

环境查看 系统内核 3.10 以上 :uname -r Cat /etc/os-release

安装docker社区版:yum install docker-ce

启动docker:systemctl start docker

基本命令:

docker version #显示 docker 版本信息
docker info #显示 docker 的系统信息,包括镜像和容器数量 、查看仓库地址
docker comm --help #帮助命令

用doker部署一个软件,如部署nginx:

1)搜索镜像:docker search nginx \\or https://hub.docker.com/_/nginx )
docker search mysql --filter=STARS=500 #搜索出来的镜像 STARS 大于 500

2)拉取镜像(下载):docker pull nginx == docker.io/library/mysql:latest
Docker pull mysql:5.7 #下载指定版本
3)查看本机是否有此镜像:docker images
4)启动容器
5)验证nginx是否安装成功:curl localhost:3344

查看镜像元数据:docker inspect 容器id

删除镜像:

docker rmi -f 87eca374c0ed #删除镜像-f 指定 id
docker rmi -f $(docker images -q) #删除所有查询到的 id,删除全部容器
docker rmi -f 镜像 id 镜像 id 镜像 id #删除多个镜像

新建并启动容器

docker run [可选参数] image
#参数说明
--name="Name" 容器名字 tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口: -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root用户的密码
--network=huicenetwork:设置专属网络环境

可以 docker run 可直接下载镜像并启动容器:
默认容器启动之后是在后台运行,停止了容器之后,容器还存在,还可以查到,加上--rm 停止后直接删除,可以查看 docker run --help
# docker run --help|grep rm
docker run -it --rm tomcat:9.0
运行容器:docker run -d -p 3355:8080 --name tomcat01 tomcat(--name是将tomcat镜像对应的容器名改为tomcat01)
docker run -d --name nginx01 -p 3344:80 nginx (3344是主机防火墙,80是docker里的nginx防火墙)
验证nginx是否安装成功:curl localhost:3344

新建并启动容器:
docker run -d centos
#后台启动 centos,docker ps,发现 centos 停止了 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker 发现没有应用,就会自动停止
docker run -it centos /bin/bash(可先下载centos镜像,若没下载此命令会自动下载,然后启动容器,执行完此命令后也会进入此容器)
查看容器下的目录文件:ls(先进入容器,再输入ls / 可看centos的根目录)

备注:可以先不映射本地ip端口、文件,先启动运行容器,然后映射容器中文件到本地文件夹,再删除容器 后,重新启动并运行容器(这次运行时加上映射的端口和文件等)

1、启动 docker run --name perfree -d -p 8080:8080 perfree/perfree:v2.3.0
//映射docker项目的resources文件夹和config文件夹到刚刚创建的文件夹中
2、将/config从perfree容器下拷贝到宿主机/data/prefree目录下
docker cp perfree:/resources/ /data/prefree
docker cp perfree:/config/ /data/prefree
3、停止并删除容器
docker stop perfree 
docker rm perfree 
4、
挂载资源启动(这样后期更新所有的数据都会在宿主机内,不会造成文件丢失)
docker run -v /data/perfree/config:/config -v /data/perfree/resources:/resources --name perfree -d -p 7080:8080 perfree/perfree:v3.1.1
命令解析:docker run -v [宿主机目录]/config:/config -v [宿主机目录]/resources:/resources --name perfree -d -p 宿主机端口:8080 perfree/perfree

查看容器:

docker ps #列出当前正在运行的容器
docker ps -a #列出当前正在运行的容器和历史运行过的容器
docker ps -n=9 #列出最近运行的容器
docker ps -a #只显示容器的编号

启动和停止容器的操作:

docker start 容器 id
docker restart 容器 id
docker stop 容器 id
docker kill 容器 id

进入容器:docker exec -it tomcat01 /bin/bash(进入容器后开启一个新的终端,可以在里面操作,注:要先确定容器已启动)

docker attach 容器 id((进入的是正在运行的容器,而不是开启新的窗口)

退出容器:
1、容器里面关闭容器,这种情况退出方式多样,存在着是否保存他的运行情况,Ctrl+P和Ctrl+Q分别按,可以退出容器,让容器仍运行,
快捷键Ctrl+D和命令exist退出容器,不运行

 

1.docker run :只有在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器的时候,只需要使用命令 docker start 就可以。 docker run 相当于执行了两步操作:将镜像(Image)放到容器(Container)中,这一步过程叫做 docker create,然后将容器启动, 使之变成运行时容器(docker start)。
2.docker start作用是:重新启动已经存在的容器。也就是说,如果使用这个命令,我们必须先要知道这个容器的 ID、或者这个容器的 名字,我们可以使用 docker ps -a命令找到这个容器的信息

docker run :根据镜像创建一个容器并运行一个命令,操作的对象是 镜像;
docker exec :在运行的容器中执行命令,操作的对象是 容器。

删除容器:

docker rm 容器 id #删除指定的容器,不能删除正在运行的容器,强制删除 rm -f
docker rm -f $(docker ps -aq) #删除指定容器
docker ps -a -q|xargs docker rm #删除所有容器

看日志(在容器外面,本机上执行):

docker logs -ftn 10
docker logs
docker logs -f -t --tail 10 a3e3706e3210
docker logs -f -t -n 10 a3e3706e3210

从容器内拷贝文件到主机上(在主机上执行命令):

docker cp read escape sequence容器 id:容器内路径 目的主机路径
docker cp asdihfwle1:z.python /

从主机拷贝程序到 alfresco 容器:docker cp mysql-bin.jar \\alfresco:/usr/local/tomcat/lib/

 

#自己编写 shell 脚本,让他一直运行,“while true;do echo test zsw;sleep 1;done”
[root@localhost ~]# docker run -d centos /bin/sh -c "while true;do echo zswdtest;sleep 1;done" 注意要是小写的

查看应用 cpu 和内存网络 IO 使用率:docker stats(在容器外面,本机上执行)
[CONTAINER]:以短格式显示容器的 ID。
[CPU %]:CPU 的使用情况。
[MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存。
[MEM %]:以百分比的形式显示内存使用情况。
[NET I/O]:网络 I/O 数据。
[BLOCK I/O]:磁盘 I/O 数据。
[PIDS]:PID 号。

查看容器中进程信息 ps: docker top 容器 id

 

挂载(容器数据卷):

Docker 容器中产生的数据,同步到本地! 这就是卷技术!目录的挂载,将我们容器内的目录,挂载到 Linux 上面!
容器关闭的时候,在主机创建的文件,也会同步到容器 好处:以后修改只需要在本地修改即可,容器内会自动同步!

1、指定路径挂载
直接使用命令来挂载 -v: docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口 镜像名 /bin/bash
举例: docker run -it -v /home/test:/home centos /bin/bash #把虚拟机 home 目录,挂载到当前主机/home/test 目录下,此时改动一个目录, 另一个目录内容也跟着改动
查看挂载是否成功:docker inspect 容器 id

将tomcat02镜像挂载后,1容器名称怎么是个id,2容器里怎么和镜像原来里面的目录不一样呢。?()

挂载到本地路径下:
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

关闭防火墙和 selinux
systemctl stop firewalld
systemctl disable firewalld
vim /etc/selinux/config 修改配置文件 SELINUX=disabled 删除 mysql 后挂载内容仍然存在

2、匿名挂载:
-v 只写了容器内的路径:docker run -d -P --name nginx01 -v /etc/nginx nginx
查看所有卷的情况 docker volume ls

3、具名挂载
-v 卷名:容器内路径
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
查看挂载路径 docker volume inspect juming-nginx

所有docker容器内的卷没有指定目录的情况下都在:/var/lib/docker/volumes/xxx/_data

多个容器之间数据共享(--volumes-from):

启动 3 个容器,通过我们刚才自己写的镜像启动(docker01父容器)
docker run -it --name docker01 zsw/centos
docker run -it --name docker02 --volumes-from docker01 zsw/centos:latest
docker run -it --name docker03 --volumes-from docker01 zsw/centos:latest
修改一个容器里面的 volume 其它都变动,

Docker 的卷标 (volumes) 是 独立的文件系统。它们并非必须连接到特定的容器上。

1. 查看所有卷标
docker volume ls
2. 查看批量的卷标
$ docker volume ls | grep mysql
local vagrant_mysql
3. 查看具体的 volume 对应的真实地址
$ docker volume inspect vagrant_mysql
[

"Name": "vagrant_mysql",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/vagrant_mysql/_data"

]

 

docker-compose 单机部署项目!:docker-compose up -d wordpress.yml
docker stack 部署,集群部署!:docker stack deploy wordpress.yml


docker-compose.yml用于描述docker容器之间的依赖关系,可以一键对多个服务进行启停操作


docker-compose进行部署项目:

1、创建要部署项目的存放目录,如在root下创建个test目录:mkdir /root/test/
2、将网盘文件 docker-compose.yml 上传到/root/test/目录下
3、构建新镜像:docker-compose build
docker-compose的工作流程就是:当你改变本地代码之后,先执行docker-compose build构建新的镜像,
然后执行docker-compose up -d取代运行中的容器
4、运行新镜像:容器初始化,在/root/test/目录下执行: docker-compose up -d
5、查看运行起来的容器:docker ps

有时间了照着此文档操作一遍---------参考地址:https://blog.51cto.com/u_12528551/5900320
https://blog.csdn.net/s619782146/article/details/125906199

网盘下载配置文件:conf.zip
上传至 Linux 目录:/mydata/services/web/nginx
解压缩配置文件 unzip conf.zip
) 网盘下载项目文件:fecshop.zip 并上传至 Linux 目录:/mydata/app/
2) 解压缩项目文件 unzip fecshop.zip
设置权限
docker-compose exec php bash
cd /www/web/fecshop
chmod +x init
./init
exit


重启:

docker-compose restart
docker-compose start #启动
docker-compose stop #停止
启动:docker-compose up -d wordpress.yml
停止:docker-compose down/CTRL+C
docker-compose ps

docker compose管理多个容器
1.Dockerfile 应用打包为镜像
2.Docker-compose yaml 文件(有3层)(定义整个服务,需要的环境,web\\redis)完整的服务!
第一层 version
第二层 service
第三层其它配置
version: "3.9" #版本
services: #服务
服务 1:web #服务配置
images : 使用镜像
build:
depends_on(依赖关系-启动顺序,和其他容器链接 使用这里个化重点
-db
-redis
network
服务 2:redis
服务 3:
#其它配置
volumes: - 映射宿主主机文件路径:容器主机文件路径
networks:
configs:
ports: - 映射宿主主机端口:容器端口
links: 容器别名
restart: no是默认的重启策略,在任何情况下都不会重启容器。 指定为always时,容器总是重新启动。 如果退出代码指示出现故障错误,则 on-failure将重新启动容器

 

docker命令整理

参考技术A 不启动docker服务,会报错:

查看docker容器hash值:

查看docker ps完整命令:

然后可以根据contnainer id打开docker命令行

容器文件复制,和cp类似

查看所有:

查看digest:

查看简写hash:

忽略简写hash:

过滤:
docker images -f xxxx

过滤标签格式 "key=value",如果有多个条件,则使用这种 --filter "key1=value" --filter "key2=value"

过滤没有打标签的镜像:

查正则:

格式化展示:
docker images --format

查看日志最后20行:

显示实时log,和tail -f 一个效果:

grep 过滤 log:

根据时间过滤查看 log:

注意,docker logs 不支持 --until

docker logs日志文件存储路径

docker 镜像信息:

cd var/lib/docker/containers/容器ID
在docker目录下,进入image文件夹,找到repositories.json文件
repositories.json文件详细记录了镜像一些信息

mac下docker镜像保存位置:

以上是关于docker命令的主要内容,如果未能解决你的问题,请参考以下文章

Docker容器常用命令

Docker快速入门——Docker常用命令

docker启动命令,docker重启命令,docker关闭命令

docker命令整理

Docker学习重点~docker命令:帮助命令镜像命令容器命令常用其他命令

容器安全之启用docker客户端命令的授权