docker

docker

0.绪论

程序代码上线前的固定测试环境,使用容器技术。多方测试搭建的环境会有所不同,没有容器技术之前是使用虚拟机vm之间的clone来提升效率,即虚拟技术;云计算便是基于虚拟技术将堆叠的硬件划分实现。但是单纯的虚拟机之间的clone是很耗费时间,因为整个系统资源极大。容器技术解决了虚拟机clone之间的操作系统重复占用资源的问题,将程序运行环境进行剥离。

  • 虚拟技术将整个操作系统的软件与硬件部分进行了隔离处理。
  • 容器技术将程序执行所需的环境(各种依赖配置及库)与操作系统进行了隔离处理。

1.原理

docker概念:

  • dockerfile(指定需要的程序、依赖配置)
  • images(文件系统)
  • container(执行起来的进程包)
  • docker hub用于下载别人编译好的image,类似于应用商城
  • docker registry用于存放各种image
  • 流程:通过docker build命令生成image,使用docker run将image运行起来就是docker container.
    docker push 推送image到docker hub,docker pull 通过docker hub下载image

docker原理架构(client--server):

  • docker client负责处理用户输入的各种命令:docker build/docker run/docker push/docker pull/...
  • docker server即docker daemon依据dockerfile创建出image.
    img
  • docker cmd 效果
    img

docker底层实现:

  • NameSpace技术:将全局的Linux PID/IPC/NET等资源隔离分派给每个NameSpace,每个NameSpace下的Linux资源互不干扰,使得每一个Namespace看上去像一个独立的操作系统。
  • Control groups技术:Namespace技术实现的是系统资源隔离,但是进程执行的过程中对设备资源的访问仍然不受控制,如CPU core/RAM/ROM/HDD/SSD/SD/Network等,为了分配及限制容器中的进程访问资源,docker 采用了control groups技术(cgroup)。

2.实现


易死机,诸君谨慎需提前备份

  1. Windows 10 安装配置docker:

  1. Linux(Ubuntu) 安装配置docker:
# 1. 安装流程
## 卸载已安装的旧版本docker
sudo apt-get remove docker docker-engine docker.io containerd runc
## 更新依赖包
sudo apt-get update
## 安装docker依赖
sudo apt-get install apt-transport-https 
sudo apt-get install ca-certificates 
sudo apt-get install curl 
sudo apt-get install gnupg 
sudo apt-get install lsb-release
sudo apt install lsb-core
## 添加docker官方gpg秘钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## 设置docker镜像仓库
echo \
>   "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
>   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## 安装docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 2. 测试docker
## docker版本及holle world
sudo docker version   
sudo docker run hello-world

# 3. 卸载docker及删除映像/容器/卷/配置
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

  1. 基于vscode使用docker基本功能:
  • vscode配置
...
  • 常用指令
### 查看client/server基本信息...
sudo docker info
sudo docker version
sudo docker cmd --help 
### 查看本地主机images
sudo docker images   
sudo docker search REPOSITORY:TAG
sudo docker pull REPOSITORY:TAG
sudo docker push REPOSITORY:TAG
### cp host--docker
docker cp [OPTIONS] SRC_PATH CONTAINER_ID:DEST_PATH
docker cp [OPTIONS] CONTAINER_ID:SRC_PATH DEST_PATH
docker cp test_rpp_client df9b4c17f509:/home/boc/kuanghl/test
### 查看docker运行状态
sudo systemctl status docker
### docker版本
sudo docker version
### 下载映像
sudo docker pull 映像名称
### 构建映像
sudo docker build -t 映像名称:tag .
### 运行映像
sudo docker run -d -p 宿主机端口:docker端口 --name 容器名称  映像名称:tag(tag应递增)
### 查看映像
docker images
### 查看容器
docker ps -a
### 删除映像
docker rmi 映像id
### 删除容器
docker rm 容器id
### 启动容器
docker start 容器id
### 停止容器
docker stop 容器id
### 进入/退出容器
docker exec -it 容器id /bin/bash
exit
### 查看容器日志
docker logs 容器id
### 查看容器内的进程
docker top 容器id
  • Dockerfile语法:
# 定制构建images:`sudo docker build -t image_name:tag .`
FROM -构建镜像基于哪个镜像
MAINTAINER -镜像维护者姓名或邮箱地址
RUN -构建镜像时运行的指令
ADD -拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
CMD -运行容器时执行的shell环境
ENTRYPOINT -运行容器时执行的shell命令
ENV -设置容器环境变量
ARG -构建时指定的一些参数
VOLUME -指定容器挂载点到宿主机自动生成的目录或其他容器
EXPOSE -声明容器的服务端口
WORKDIR -为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
USER -为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
HEALTHCHECK -健康检查
ONBUILD -延迟构建命令的执行
LABEL -指令用来给镜像添加一些元数据
  • docker配置:
# Set the IPC mode for the container
--ipc="MODE" 
# create container based on images_id
docker run -it --ipc=shareable --name container_name images_id /bin/bash

3.测试

  • rpptest:
      1. open terminal1: docker images&&docker ps -a&&docker start CONTAINER ID&&docker attach CONTAINER ID&&su - boc(进入容器)
      1. open terminal2:docker cp file_or_dir CONTAINER ID:dir&&ifconfig&&cd rpp_drv_api/build(将要跑的测试例程序cp到docker,并查看容器的ip,到执行文件夹)
      1. in terminal1:export RPP_SOCK_SERVER_IP="docker0: inet_ip"&&ls&&cd cp_dstdir(设置ip,到测试例程序执行文件夹)
      1. in terminal2:./bin/rpp_server
      1. in terminal1:执行测试例程序
  • cmd流程:
    1. images get
    2. create container based images with config(eg:ipc/uts/pid/network)
    3. run container
    4. copy file to images from host
    5. config env/ssh and so on
    6. run binary executable file
    7. over test
    8. eg:
      docker ps -a
      sudo docker container commit CONTAINER_ID images_name:v1.0
      sudo docker import tar_name.tar images_name:v1.0
      docker load < tar_name.tar
      - or edit Dockerfile to build
      docker images
      docker run -it --ipc=shareable --name container_name images_id /bin/bash
      - cmd or bash/shell or executable binary
      docker export container_id > tar_name.tar
      docker save images_id > tar_name.tar
      

4.example list:

  • docker import &&docker images
    img

  • docker run&&docker ps -a
    img
    img

  • docker start/docker attach:
    img

  • docker cp:
    host:
    img
    docker:
    img

  • eg to test develop-app:
    docker:
    img
    host:
    img

  • exit&&docker export&&docker rm&&docker rmi:
    img
    img

  • waiting for update......

posted @ 2023-04-19 12:21  天纵之才  阅读(29)  评论(0)    收藏  举报