dockerfiles编写 FROM :继承的镜像,docker容器必须要继承一个镜像
MAINTAINER :维护人员信息 ideask<ideask@outlook.com >
ENV :需要配置环境变量
RUN :后面是执行的命令
EXPOSE :声明需要维护的端口,用处不大,但是对镜像使用者进行提醒
CMD :通过CMD指令指定容器启动时要执行的命令,执行路径!!记得设置,譬如要下载和解压文件,必须指定路径而且&&并着来执行,不然路径会出错!!!!!
Volume : 要挂载的目录
COPY :命令用于将于Dockerfile所在目录中的文件在镜像构建阶段从宿主机拷贝到镜像中,对于文件而言可以直接将文件复制到镜像中
ADD :命令相对于COPY命令,可以解压缩文件并把它们添加到镜像中的功能,如果我们有一个压缩文件包,并且需要把这个压缩包中的文件添加到镜像中。需不需要先解开压缩包然后执行 COPY 命令呢?当然不需要!我们可以通过 ADD 命令一次搞定
docker build 1 docker build -f bbb-ubuntu14-sshd -t bbb-ubuntu14-sshd-env:1.0 .
docker commit 1 2 3 4 5 6 7 8 9 10 11 12 13 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] OPTIONS说明: -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。 runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1 sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057 runoob@runoob:~$ docker images mymysql:v1 REPOSITORY TAG IMAGE ID CREATED SIZE mymysql v1 37af1236adef 15 seconds ago 329 MB
docker images docker images history
docker ps / docker ps -a 1 2 3 4 //查看当前运行的容器 docker ps //查看所有容器 docker ps -a
docker stop
docker start
docker exec
docker rm
docker rmi
docker update 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 描述 更新一个或多个容器的配置。 语法 docker update [OPTIONS] CONTAINER [CONTAINER...] OPTIONS 说明: --blkio-weight 阻塞IO (相对权重),介于10到1000之间,0表示禁用(默认禁止) --cpu-period 限制CPU CFS(完全公平的调度程序)期限 --cpu-quota 限制CPU CFS(完全公平的调度程序)配额 --cpu-rt-period API 1.25+,将CPU实时时间限制为微秒 --cpu-rt-runtime API 1.25+,将CPU实时运行时间限制为微秒 --cpu-shares, -c CPU份额(相对权重) --cpus API 1.29+,CPU数量 --cpuset-cpus 允许执行的CPU(0-3,0,1) --cpuset-mem 允许执行的MEM(0-3,0,1) --kernel-memory 内核内存限制 --memory-swap 交换限制等于内存加交换,“-1”以启用无限交换 --memory-reservatio 内存软限制 --memory, -m 内存限制 --pids-limit API 1.40+,调节容器pids限制(-1表示无限制) --restart 容器退出时重新启动策略以应用 实例: 1.更新 CPU 共享数量 docker update --cpu-shares 512 f361b7d8465 2.更新容器的重启策略 docker update --restart=always f361b7d8465 3.更新容器内存 docker update -m 500M f361b7d8465
docker create 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //创建一个容器暂时不运行,语法同下 run一样 //docker create [OPTIONS] IMAGE [COMMAND] [ARG...] //--name 指定一个容器别名 //-e 设置环境变量 //-v 挂载文件目录 //-p 端口映射 docker create --name=hexo-domain.com \ -e HEXO_SERVER_PORT=4000 \ -e GIT_USER="Your Name" \ -e GIT_EMAIL="your.email@domain.tld" \ -v /blog/domain.com:/app \ -p 4000:4000 \ spurin/hexo
docker run 1 2 // -d 以守护进程运行 -p 指定端口映射宿主机端口:容器端口 docker run -d -p 101:22 bbb-ubuntu14-sshd:1.0
docker logs 1 2 3 4 5 6 7 8 9 10 docker logs [OPTIONS] CONTAINER OPTIONS说明: -f : 跟踪日志输出 --since :显示某个开始时间的所有日志 -t : 显示时间戳 --tail :仅列出最新N条容器日志
docker导入导出镜像方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 导入导出命令介绍 涉及的命令有export 、import、save、load save命令: docker save [options] images [images...] 示例 docker save -o nginx.tar nginx:latest 或 docker save > nginx.tar nginx:latest 其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag) load命令: docker load [options] 示例 docker load -i nginx.tar 或 docker load < nginx.tar 其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息export 命令: docker export [options] container 示例 docker export -o nginx-test.tar nginx-test 其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name) import命令: docker import [options] file|URL|- [REPOSITORY[:TAG]] 示例 docker import nginx-test.tar nginx:imp 或 cat nginx-test.tar | docker import - nginx:imp 区别: export 命令导出的tar文件略小于save命令导出的 export 命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出 基于第二点,export 导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示,nginx:latest是save导出load导入的,nginx:imp是export 导出import导入的。 建议: 可以依据具体使用场景来选择命令,若是只想备份images,使用save、load即可 若是在启动容器后,容器内容有变化,需要备份,则使用export 、import
常见问题集 解决:Dockerfile 中执行 tar 1 2 3 4 5 6 7 8 tar (child): xz: Cannot exec : No such file or directory tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now 原因: 没装xz组件 解决: apt-get install xz-utils
例子-创建一个ubuntu14带有sshd服务的容器并且部署好开发环境 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 FROM ubuntu:14.04 MAINTAINER ideask<ideask@outlook.com> ENV TERM=xterm ENV WORKDIR=/home/BBB/build RUN echo "dash dash/sh boolean false" | debconf-set-selections \ && echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d \ && dpkg-reconfigure -p critical dash \ && apt-get update \ && apt-get install -y openssh-server git gitk wget xz-utils python dpkg lzma pkg-config libncurses5-dev \ autoconf automake cmake libtool \ && apt-get update \ && apt-get clean \ && groupadd -g 1000 BBB \ && useradd -u 1000 -g 1000 -G sudo -m BBB \ && mkdir -p $WORKDIR \ && chown BBB:BBB $WORKDIR \ && echo "BBB:ideask" | chpasswd \ && echo "root:ideask" | chpasswd \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ && cd $WORKDIR RUN mkdir -p /var/run/sshd RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config RUN cd $WORKDIR \ && wget -c -O gcc.tar.xz https://releases.linaro.org/components/toolchain/binaries/6.5-2018.12/arm-linux-gnueabihf/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz \ && tar -xf gcc.tar.xz \ && export CC=`pwd `/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- RUN cd $WORKDIR \ && git clone -b v2019.04 https://gitee.com/ideask/u-boot.git --depth=1 \ && cd u-boot \ && pwd \ && ls \ && git pull --no-edit https://gitee.com/ideask/u-boot-bbb.git v2019.04-bbb.io-am335x RUN cd $WORKDIR \ && pwd \ && ls \ && git clone https://gitee.com/ideask/ti-linux-kernel-dev.git \ && cd ti-linux-kernel-dev/ \ && pwd \ && ls \ && git checkout origin/ti-linux-rt-5.10.y -b tmp RUN cd $WORKDIR \ && wget -c https://rcn-ee.com/rootfs/eewiki/minfs/ubuntu-20.04.2-minimal-armhf-2021-06-20.tar.xz \ && tar xf ubuntu-20.04.2-minimal-armhf-2021-06-20.tar.xz EXPOSE 22 CMD ["/usr/sbin/sshd" , "-D" ] ENV TERM=xterm-256color \ TERMINFO=/lib/terminfo