Docker
基础概念
Docker使用go开发的一种沙箱工具,他使得应用可以单独运行在沙箱中,通过端口映射或者volumes与外界进行交互。这可以让一个机器上可以运行多种不同环境的应用且互不干扰,例如一个比较大型的引用,使用的此方式单独维护一个模块,使得系统的可靠性大大增强
- 容器
镜像运行的实例,一个镜像可以运行多个实例。 - 镜像
一个完整的可运行的资源集合 - 仓库
保存镜像
使用
这里记录高频次使用的功能,其他的后续记录
镜像的管理
- pull
- push
- commit
修改一个容器之后,使用commit在此基础上构建自己的容器 - build
创建一个镜像,使用docker build语句创建,需要自己编写Dockerfile,具体的编写规则可以参考nosipage - rmi
容器的管理
- run
创建新的容器,且会使用run指定启动规则,例如端口的映射,volumes文件的指定,以及其他重要参数等,这个命令可以说重要,因为同一个镜像,使用不同参数启动之后,效果是不一样的,对于开发来时,更多的是参与后期的开发,如果不是前期的项目设计,这里了解即可,但是最好的是知道他的只要参数的意义,因为和其他命令有的是通用的,例如-i -t -p等 - start
- stop
- restart
- exec
使用此命令可以进入运行中的容器中区,exec -it xxx command - attach
- rm
- logs
- cp
在本地和容器中传输文件 - export
- ps
- run
其他命令基本在遇到的时候,再去查看
权限问题
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json": dial unix /var/run/docker.sock: connect: permission denied
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将当前用户添加到docker用户组
newgrp docker #更新docker用户组
System has not been booted with systemd as init system (PID 1). Can’t operate.
- 使用 –privileged=true
- /sbin/init
- 从一开始就最基础的镜像手动构建,使用docker file 构建镜像之后,即使指定 privileged 也无效
- systemctl 验证
- docker file 指定用户之后, 后续即使容器 systemctl 失败,暂时没有解决方案,gitlab中又需要指定非root用户~~
- gitlab 不支持指定容器用户,gitlab有issue,也有解决方案,但是当前版本runner不支持 指定user
- 解决方案
- 使用ssh到容器中执行,
- 无法任务并行,会有端口冲突这类的问题
- ssh到宿主机中启动docker,然后copy代码到docker 中,或者build镜像然后执行
- 可任务并发,后续研究怎么实现
常用命令
docker run -dit --name centos-p centos /sbin/init
docker run \
--mount type=bind,source=/home/asky/asky,target=/workspaces/asky \
--mount type=bind,source=/home/asky/.workspaces,target=/workspaces/.common \
--privileged=true -itd regress:latest /sbin/init
/home/wen/.workspaces:/workspaces/.common:rw
docker run \
--mount type=bind,source=/home/wen/.workspaces,target=/workspaces/.common \
--mount type=bind,source=/var/lib/docker/volumes/runner-bpams8g-project-152-concurrent-0-cache-c33bcaa1fd2c77edfc3893b41966cea8/_data,target=/builds \
--privileged=true -itd asky:1 /sbin/init
"Source": "/var/lib/docker/volumes/runner-a8wbhcvb-project-5-concurrent-1-cache-c33bcaa1fd2c77edfc3893b41966cea8/_data",
"Destination": "/builds",
docker run --mount type=bind,source=/home/wen/.workspaces,target=/workspaces/.common --privileged=true -itd asky:latest
docker run --mount type=bind,source=/home/wen/.workspaces,target=/workspaces/.common --privileged=true -itd asky:1.0 /sbin/init
docker run -d -p 443:443 -p 80:80 -p 22:22 --name gitlab --restart always \
-v $GITLAB_HOME/config:/etc/gitlab:Z -v $GITLAB_HOME/logs:/var/log/gitlab:Z -v $GITLAB_HOME/data:/var/opt/gitlab:Z gitlab/gitlab-ce
docker exec -it centos-p /bin/bash
docker commit -a "xxx" -m "a new centos 8 env" centos-p centos-pre:1
docker cp /home/wen/xxxxx/.git centos-p:/home/xxxxx
docker build -f DockerFile -t xxx ./
构建基础 pg centos镜像
FROM centos:8
LABEL description="build xxxxx regress env"
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://mirror.centos.org/$contentdir|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g' \
-i.bak \
/etc/yum.repos.d/CentOS-*.repo
RUN yum makecache
RUN yum update -y
RUN yum install -y gcc flex bison make perl-ExtUtils-Embed python3 python3-devel readline-devel zlib-devel pam-devel libxml2 libxml2-devel libxslt libxslt-devel openldap openldap-devel wget git perl perl-devel sudo
RUN dnf -y --enablerepo=powertools install perl-IPC-Run perl-Capture-Tiny perl-DateTime
WORKDIR /home
RUN git clone --depth=1 https://ghproxy.com/https://github.com/linux-test-project/lcov -b v1.14 /home/lcov
WORKDIR /home/lcov
RUN make install
RUN genhtml
WORKDIR /home
RUN wget https://libssh2.org/download/libssh2-1.11.0.tar.gz
RUN tar -zxf libssh2-1.11.0.tar.gz
WORKDIR /home/libssh2-1.11.0
RUN ./configure
RUN make install
WORKDIR /home
RUN rm -rf /home/lcov
RUN rm libssh2-1.11.0.tar.gz
RUN rm -rf /home/libssh2-1.11.0
RUN useradd -ms /bin/bash centos
RUN echo 'centos ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
USER centos
- 使用命令
docker build -f DockerFile -t xxx ./
- 构建失败时,存在中间镜像,可以从中间镜像开始构造
- 后期需要修改的时候,如果是增量修改,可以直接从已构造的镜像继续
- file中需要改变路径不能直接cd,必须使用
WORKDIR
- 指定用户使用 USER
- 编写file过程中,如果需要添加某些操作,从文件尾部添加,尽量使用缓存
lcov 安装
使用perl实现的,极度依赖perl 的某些模块,但是perl模块有的不能直接yum安装,需要使用 powertools
,且有的模块使用 powertools 也无法直接安装。。。
install 之后使用genhtml 验证是否安装完成
git clone --depth=1 https://github.com/linux-test-project/lcov -b v1.14 /home/lcov
make install
genhtml
查看 已案转perl 模块
sudo find perl -e 'print "@INC"'
-name ‘*.pm’
docker run
–mount type=bind,source=/home/wen/.workspaces,target=/workspaces/.common
-itd centos-antdb
Read other posts