docker 及docker compose笔记

本文详述了Docker的基础操作,包括登录、搜索、拉取镜像,容器的管理如启动、停止、重启及删除,以及如何进入和删除容器。此外,还介绍了如何创建和提交镜像,使用Dockerfile创建新镜像,以及Docker Compose的使用。同时,讲解了数据持久化的Docker卷和网络管理,最后提到了Dockerfile中的CMD和ADD指令的使用注意事项。
摘要由CSDN通过智能技术生成

Docker hub:
usr:yuyixiong
pw: yuyixiong
email: 900925.com
hub 查看 :https://www.runoob.com/docker/docker-repository.html
1:docker login
2: docker search
3: docker pull image_name:tag —> docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Docker:
容器管理命令:
docker container --help
eg: top, ls, rename, rm ,etc。。。。

后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
$ docker run -itd --name ubuntu-test(name) ubuntu(image) /bin/bash

停止docker
$ docker stop <容器 ID>

重启docker
$ docker restart <容器 ID>

进入容器:
docker exec eg:docker exec -it mynginx(容器ID) /bin/sh
docker attach 容器id, 退出容器终端, 会导致容器停止(不推荐)

删除容器:
docker rm -f 1e560fca3906

下载/拉取镜像:
docker pull ubuntu(image name):13.10(version)

查找镜像:
docker search 镜像名称

查看镜像:
docker images 

删除镜像
docker rmi 镜像名称

创建镜像:
		当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

		1、从已经创建的容器中更新镜像,并且提交这个镜像
		2、使用 Dockerfile 指令来创建一个新的镜像
				a:创建Dockerfile 
				b:docker build -t runoob/centos:6.7(image name) .(dockerfile dir)
					参数说明:
					-t :指定要创建的目标镜像名
					. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
				c: docker run -t -i runoob/centos:6.7  /bin/bash   使用新的镜像来创建容器
设置镜像标签:
	docker tag 860c279d2fec(tag name) runoob/centos:dev(new tag)
	docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。
	
	
查看docker实例:
docker ps
docker ps -a --no-trunc 可以查看完整的COMMAND

export 和 import 导出的是一个容器的快照, 不是镜像本身, 也就是说没有 layer。
你的 dockerfile 里的 workdir, entrypoint 之类的所有东西都会丢失,commit 过的话也会丢失。

快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。

 docker save 保存的是镜像(image),docker export 保存的是容器(container);
 docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像;
 docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称。
 
 问题:
	docker报错:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
	查看docker 服务是否启动:systemctl status docker.service 然后restar一下

下载镜像:
docker pull ubuntu
docker pull ubuntu:18.04
docker pull ubuntu@sha256:82becede498899ec668628e7cb0ad87b6e1c371cb8a1e597d83a47fac21d6af3

docker pull 下来的镜像文件存放的位置: /var/lib/docker/containers/

Docket Compose:
Compose 使用的三个步骤:

	使用 Dockerfile 定义应用程序的环境。

	使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

	最后,执行 docker-compose up 命令来启动并运行整个应用程序。
	docker-compose up -d  后台执行。

docker commit :从容器创建一个新的镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
例1
docker commit -a “runoob.com” -m “my apache” a404c6c174a2 mymysql:v1
例2

		docker commit -m  ""   -a  ""   [CONTAINER ID]  [给新的镜像命名]
		docker commit -m  ""   -a  "" aa myelasticsearch:1.0

adc7d969aa15 registry.sensetime.com/viperlite/viper-lite:v2.3.0-dd32e2e-nolic-arm64-cuda10 “bash -c './bin/vide…” 22 hours ago Up 4 hours 0.0.0.0:8132->8132/tcp vps-worker-face

be14290e6cdcfec0f42d89a908f69d3ab7fb3231a14ab579799de9e0211b8b34 mysql/mysql-server:8.0-aarch64 “/entrypoint.sh --default-authentication-plugin=mysql_native_password”

mysqld --default-authentication-plugin=mysql_native_password --user=mysql

/run/mysqld/
/usr/sbin/mysqld

/lib/libssl.so.1.1
find: ‘/proc/1/task/5593/fdinfo/368’: No such file or directory
/usr/lib/aarch64-linux-gnu/libssl.so.1.1

Docker 网络:
sensetime@sensetime-desktop:/$ docker network ls
NETWORK ID NAME DRIVER SCOPE
5a25ffa22446 bridge bridge local
f47a015ec643 compose_default bridge local
0afd801763ec host host local
efda02e01096 none null local
0c4b4c164320 shisy_default bridge local
db37d9ee5bf7 viper-lite bridge local

	查看某个网络的详细信息:
	docker network inspect viper-lite
	
	创建网络:
	docker network create -d bridge viper-lite
	
	sensetime@sensetime-desktop:/$ ip link show docker0  docker中默认网络的bridge
	docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
	link/ether 02:42:e3:77:cf:b4 brd ff:ff:ff:ff:ff:ff
	
	docker启动时, 可以通过--network来指定采用那个网络

Docker 卷与数据持久化:docker卷数据在主机的/var/lib/docker/volume目录下,持久化, 卷的数据不会因为容器被删除, 数据就会删除, 与容器的生命周期是解耦的
docker volume create
docker volume ls
docker volume insprect
docker volume prune :谨慎使用,会删除未被容器或者服务副本使用的全部卷。
docker volume rm
docker load:
docker load -i v3.0.1-20210919.all.M8.tar.gz
docker load < v3.0.1-20210919.all.M8.tar.gz
docker load : 导入使用 docker save 命令导出的镜像。

	语法
	docker load [OPTIONS]
	OPTIONS 说明:

	--input , -i : 指定导入的文件,代替 STDIN。

	--quiet , -q : 精简输出信息。

Dockerfile 编写:
官网:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
菜鸟教程:https://www.runoob.com/docker/docker-dockerfile.html

ADD
ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

CMD 在docker run 时运行。
RUN 是在 docker build。
####注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。####


1、创建一个文件夹 viper-lite,并解压到其中
2、执行install.sh

强制删除所有容器:
docker container rm -f $(docker ps -a -q)
删除所有镜像:
docker image rm -f $(docker images)

查看Docker 指定容器启动日志:
docker logs nebula-mini

license CA:
:扩容信息, 路数的视频流信息。qutoa信息。

nebula 笔记:
创建目录:/home/yuyixiong/go/gopath/src/gitlab.sz.sensetime.com/senseNebula-m/nebula-mini
make arm=1
打镜像:
1:web.zip rootfs.tar 拷贝到nebula-mini西瓜分支代码目录
2:解压unzip web.zip
3:在代码根目录(/home/yuyixiong/go/gopath/src/gitlab.sz.sensetime.com/senseNebula-m/nebula-mini)中执行:./pack.sh ./ ./web ./rootfs.tar

安装docker-compose:
https://docs.docker.com/compose/install/#install-using-pip

主要是装Nginx的教程都是centOS的,Ubuntu的完全找不到...

于是就抄着“yum -y install openssl openssl-devel”改成“apt-get install openssl openssl-devel”撸了一下...

这个原因很简单,乌班图根本没这个软件,下载下面几个就行了

sudo apt-get install libpcre3 libpcre3-dev
//有可能用到


On ubuntu 16.04 you can use official apt package without install any other ppa repository.

sudo apt install rustc
... and don't forget cargo

sudo apt install cargo


standard_init_linux.go:211: exec user process caused "exec format error"


sensetime@sensetime-desktop:/usr/local/bin$ sudo ln -s /home/sensetime/.local/bin/docker-compose /usr/local/bin/docker-compose
ln: failed to create symbolic link '/usr/local/bin/docker-compose/docker-compose': File exists
sensetime@sensetime-desktop:/usr/local/bin$ ls
docker-compose  nsys
sensetime@sensetime-desktop:/usr/local/bin$ sudo rm -rf docker-compose
sensetime@sensetime-desktop:/usr/local/bin$ sudo ln -s /home/sensetime/.local/bin/docker-compose /usr/local/bin/docker-compose
sensetime@sensetime-desktop:/usr/local/bin$ docker
docker          docker-compose  dockerd         docker-init     docker-proxy    
sensetime@sensetime-desktop:/usr/local/bin$ docker-compose --version
docker-compose version 1.29.2, build unknown

原理解释:

    您可以docker inspect <image-id>查看一下你所docker pull下来的镜像架构("Architecture"属性),一般出现这种问题,表示镜像架构与运行时架构不匹配导致的。

单独启动一个容器 by yaml
docker-compose -f infra.yaml -p dms up -d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值