Docker(容器虚拟化技术 )

1.docker

        Docker是开源的Linux软件,是一个帮助解决如何安装、拆卸、升级、分发、信任和管理软件的工具,任何使用Docker的软件其实是在一个容器内运行。rkt(rock-it)也是一个运行容器的平台,它使用的是OCI镜像,也可以运行在常规的Docker容器镜像。

2.容器

        运行Docker可以认为是在用户空间运行的两个程序(Docker守护进程和Docker CLI(用户交互))。容器是以Docker守护程序的子进程运行,封装在容器中,并授权其在自身用户空间储存子空间中 运行。容器之间是相互隔离的(如文件系统内)。

3.镜像

         3.1 使用Docker分发软件,实际就是分发镜像。镜像理解为一个只读的文件包。镜像可以创建容器。镜像在Docker生态系统中是可交付的基本单元。

        3.2 镜像分层(每一层可以被不同镜像重用):镜像不是一个大的二进制块,而是由多层组成的。不同的镜像可能会共享分才层,这会让储存和传输变得高效。例如node:7镜像,所有组成的基础镜像只会被储存一次,Docker会加载每一层,一些分层已经储存在机器上了,它就会只下载未被储存的分层。

4.命令

1. service docker start 启动docker

2.docker run(运行容器)--volume 路径(定义挂载点)--volume-from 容器名(复制该容器卷的定义)     -d/--detach(后台运行) -i (对容器保持stdin打开) -t(容器分配虚拟终端) --name web(容器id)-p 3000:3000(本机端口:容器端口) --network 网络名 --network-alias 网络别名  --link web:web(单向这个容器访问web容器 :号后标识内部访问) nginx:latest(镜像名称)

docker create -e (注入环境参数)WS=fd 镜像名 镜像创建容器

docker ps -a(查看所有容器) 查看正在运行的容器

docker restart/stop 容器名字 重启/停止容器

docker inspect -f '{{.State.Running/Pid}}' 容器名字 查看容器元数据

docker cp ./some_file CONTAINER:/work 本机到容器

docker cp CONTAINER:/var/logs/ /tmp/app_logs 容器到本机

docker logs wp 查看容器日志

docker top web 查看容器进程

docker exec web sh命令(kill pid) 在容器中执行命令 |docker exec -it  web /bin/bash(或bash) 进入容器

dokcer build -t(镜像名称)  getting-started

docker rm -f web 删除容器(停止)

docker stop web 停止容器

docker rm -vf $(docker ps -qa) 删除所有容器(包括运行的容器)

docker pull/search 镜像名

docker images 查看所有镜像

docker stats 查看容器内存

docker commit  容器  镜像  提交修改的容器镜像

docker history 镜像:tag 查看镜像历史

docker login -u YOUR-USER-NAME    

docker tag registry:2 localhost:5000/distribution 创建镜像

docker tag registry:2 YOUR_USER_NAME/registry:2  (tag时,镜像id不变)

5.仓库

        5.1 仓库名由该镜像所在主机、拥有该镜像的用户账号和一个简短的名称组成。例如:qua.io/dockeruer/che_hello_registry。仓库储存镜像。

        5.2 启动私有仓库服务,对外暴露5000 docker run -d -p 5000:5000 --restart=always(开机自启) --name local-registry(容器名字) registry:2(镜像)

        查看私有仓库的镜像:curl -X GET http://localhost:5000/v2/_catalog

        上传私有仓库,需要镜像重命名。docker tag tutum/lamp 127.0.0.1:5000/tutum/lamp:v1(v1镜像tag)

6.镜像文件

       6.1 镜像很小时。docker save -O myfile.tar 镜像名  导出镜像文件

                加载镜像文件 docker load -i myfile.tar

       6.2 Dockerfile 文件构建镜像 dockerfile

                 ENTRYPOINT 定义容器启动时被调用的可执行程序 CMD 指定传递给ENTRTPOINT的参数。ENTRYPOINT ["",""] 和 ENTRYPOINT node app.js区别在于shell的使用

              docker build -t docker1:list -f ./dockerfile .

        6.3 /etc/docker/daemon.json文件,下载慢 修改镜像"https://ooq07srv.mirror.aliyuncs.com"或
  "https://registry.cn-hangzhou.aliyuncs.com"

        一旦图层发生更改,所有下游图层也必须重新创建

7.储存卷

        卷是保存Docker 容器中数据的首选机制。虽然绑定挂载依赖于主机的目录结构,但是卷完全有Docker管理。

        储存卷是容器目录树上的挂载点。类型有两种:绑定挂载存储卷(使用的是用户提供的主机目录或文件)bind,管理储存卷(由Docker守护进程控制的位置)volume        

        创建储存卷 todo-db, 用参数进行挂载  -v todo-db:/etc/todo (结果 "Source": "/var/lib/docker/volumes/todo-db/_data","Destination": "/etc/todo",) 。Source 为宿主机目录。  Destination 为容器内目录。挂载储存卷的作用持久化数据。例如,进入容器的/etc/todo,touch一个文件(在宿主机/var/lib/docker/volumes/todo-db/_data,会自动生成这个文件),退出容器后删除该容器。最后查看宿主机的/var/lib/docker/volumes/todo-db/_data目录依然文件存在。

docker volume create todo-db
docker volume inspect todo-db 查看数据卷位置
docker run -dp --mount type=volume,src=todo-db,target=/etc/todos unbutu

8.Docker网络

        连接Docker网络,需要经过Docker 0虚拟网桥接口路由到容器虚拟接口。包括单主机虚拟网络和多主机虚拟网络。由强到弱Closed容器(容器进程只能访问本地环路。 --net none),Briged容器,Joined容器,Open容器。

        用户自定义桥接网络

               docker 使用特定工具来管理底层网络基础设施(如在linux上配置iptables规则)

               docker  network  create/ls/rm/inspect 桥接网络名(查看/删除/查看/connect/disconnect 网络名 容器id )

               mysql 连接示例:

docker run -d `
     --network todo-app --network-alias mysql `
     -v todo-mysql-data:/var/lib/mysql `
     -e MYSQL_ROOT_PASSWORD=secret `
     -e MYSQL_DATABASE=todos `
     mysql:8.0
docker run -dp 3000:3000 \
   -w /app -v "$(pwd):/app" \
   --network todo-app \
   -e MYSQL_HOST=mysql \
   -e MYSQL_USER=root \
   -e MYSQL_PASSWORD=secret \
   -e MYSQL_DB=todos \
   node:18-alpine \
   sh -c "yarn install && yarn run dev"

                

9.Docker-compose

        Compose 是一个用于定义、启动、和管理服务的工具。通常在YAML文件中定义服务和服务系统,docker-compose命令进行管理,如docker-compose up -d。

docker compose down,该命令不会删除数据卷。环境变量在Dockerfile中用$variable_name或${variable_name}表示。它们被同等对待,大括号语法通常用于解决变量名没有空格的问题。例如

FROM busybox
ENV FOO=/bar
WORKDIR ${FOO}   # WORKDIR /bar
ADD . $FOO       # ADD . /bar
COPY \$FOO /quux # COPY $FOO /quux

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