Docker 简明笔记
来源:互联网 发布:淘宝关键词采集 编辑:程序博客网 时间:2024/06/05 01:54
Docker 简明笔记
原理
- 利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
基本命令
- docker version
查看docker的属性 - docker info
查看docker系统层面信息 - docker search ubuntu16.04
搜索镜像 - docker pull ubuntu
下载镜像 - docker run ubuntu /bin/echo hello world
run使用镜像 - docker run -i -t ubuntu /bin/bash
交互使用镜像 - docker run -d ubuntu /bin/bash -c “while true;do echo hello world;sleep 1;done”
以守护态(Daemonized)形式运行 - docker logs CONTAINER_ID
查看容器的运行 - docker ps
查看新镜像 - sudo docker images # 查看镜像相关信息
- sudo docker history {image id} # 查看镜像的操作历史
操作新镜像 - sudo docker run -d -p 80 –name suibianquming chen/wodedaoke nginx -g “daemon off;”
- sudo docker ps -l
- sudo docker port f59e8ccb6f21 80
- sudo docker run -d -p 127.0.0.1:33222:80 –name ceshiduankou chen/wodedaoke nginx -g “daemon off;”
扩展阅读
查看依赖:
uname -a
需要满足64位操作系统,内核版本2.8以上。
ls -l /sys/class/misc/device-mapper
或者
sudo grep device-mapper /proc/devices
显示device-mapper的相关状态。
docker安装
gpg --keyserver pgpkeys.mit.edu --recv-key 9AA38DCD55BE302Bsudo apt-get updatesudo apt-get install docker-enginesudo apt-get install docker-engine --fix-missing
docker与防火墙
将/etc/default/ufw文件改换:
DEFAULT_FORWARD_POLICY="DROP"
改为
DEFAULT_FORWARD_POLICY="ACCEPT"
然后
sudo ufw reload docker
使用sudo docker run -i -t ubuntu /bin/bash #-i 交互 -t 创建 tty 伪终端
# 如果本地没有这个镜像, docker 会从官方指定的源下载该镜像。sudo docker run --name bob_the_container -i -t ubuntu /bin/bash # 取一个名字 sudo docker start bob_the_containersudo docker start 11b5de36fcb8sudo docker attach bob_the_container # 重新附着到该容器的会话上。sudo docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" #-d 表示以守护进程的模式进行启动。sudo docker logs daemon_davesudo docker logs -ft daemon_davesudo docker logs --tail 10 daemon_davesudo docker run --log-driver="syslog" --name daemon_dwayne -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" # 会禁用 docker 的 log 功能并将 log 自动导出到 Syslogsudo docker top daemon_davesudo docker stats daemon_davesudo docker exec -d daemon_dave touch /tmp/temptfile # 额外启动新进程sudo docker stop daemon_davedocker ps -n 2 # 显示最后两个容器sudo docker run --restart=always --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" #restart 的判断模式还可设置为 on-failure:5sudo docker inspect daemon_davesudo docker rm 11b5de36fcb8sudo docker rm `sudo docker ps -a -q` #-q 表示只返回容器的 IDsudo docker pull fedora:21sudo docker search puppetsudo docker pull jamtur01/puppetmastersudo docker images fedorasudo docker pause container_name
docker深入
当一个容器启动后,它会被移到内存中,而引导文件系统则会被卸载,以留出更多内存提供给initrd镜像用。
联合加载技术
bootfs; rootfs
写时复制;镜像分层框架
用Dockerfile构建镜像
在test文件夹中touch一个文件Dockerfile。内容如下:
#versionFROM ubuntuMAINTAINER james turnbull "chen@email.com"RUN apt-get update && apt-get install -y nginxRUN echo 'hi, im in your container' >/usr/share/nginx/html/index.htmlRUN ["apt-get", "install", "-y", "sdcv"]EXPOSE 80Dockerfile指令RUN # 指定镜像被构建时候要运行的命令CMD # 容器启动时候运行的命令CMD ["/bin/bash", "-l"]# 命令行中的指令会覆盖 Dockerfile 中的 CMD 指令# 在 Dockerfile 中只能指定一条 CMD 指令ENTRYPOINT ["/usr/sbin/nginx"] # 同 CMD ,在容器启动的时候运行WORKDIR /opt/webapp/dbENV RVM_PATH /home/rvm RVM_ARCHFLAGS="-arch i386" # 这个新的环境变量可以在后面的任何 RUN 指令中使用。ENV TARGET_DIR /opt/appWORKDIR $TARGET_DIR# 也有命令行用 -e 传递环境变量。如: sudo docker run -it -e "WEB_PORT=8080" ubuntu envUSER nginx:group # 用 nginx 用戶的身份运行。可以在命令行中用 -e 进行覆盖。VOLUME ["/opt/project"] # 这条指令会为基于这个镜像的任何容器创建一个文件夹ADD sourcepath/file targetpath/file # 会将外部环境下的当前目录下对应的文件复制到镜像中对应的路径。路径也可用 URL 作为文件源。ADD http://wordpress.org/latest.zip /root/wordpress.zip # 小魔法:归档文件指定为源文件,在目的路径会自动解压。也会自动创建对应的全路径。COPY conf.d/ /etc/apache2 # 同 ADD 。只是复制。LABEL label="value" # 键值对的形式进行展现。可用 docker inspect 进行查看。STOPSIGNAL SIGKILL # 设置停止容器时发送什么系统调用信号给容器。信号必须合法。ARG build webapp_user=user # 构建时采用 --build-arg. 运行 docker build --build-arg build=1234 -t chen/images_nameONBUILD ADD . /app/src # 创建一个触发器。当一个镜像被用作其他镜像的基础镜像时,该触发器会被执行。这些指令是紧 跟在 FROM 之后的。可通过 docker inspect image 或container 进行查看。
如何理解ENTRYPOINT:
在Dockerfile中ENTRYPOINT一个命令,如果外部命令行进行一个操作(该操作和原操作冲突),则该操作不会执行。如果文件内部ENTRYPOINT的命令没有参数,则外部命令行的参数可作为内部命令的参数。
一次网站的搭建
可以直接运行我的dockernginx.sh脚本。或者代码如下:
#!/bin/bash#auth cheng#date 2017-7-26#install a website with a docker.sudo docker pull ubuntucd ~mkdir test/sample -pcd test/samplemkdir nginx && cd nginxwget https://raw.githubusercontent.com/jamtur01/dockerbook-code/ master/code/5/sample/nginx/global.confwget https://raw.githubusercontent.com/jamtur01/dockerbook-code/ master/code/5/sample/nginx/nginx.confwrite_dockerfile()cd ..sudo docker build -t ubuntu .images_id = $(sudodockerimages|grepubuntu|awk'{print$3}')sudo docker history $images_idmkdir website && cd websitewget https://raw.githubusercontent.com/jamtur01/dockerbook-code/ master/code/5/sample/website/index.htmlcd ..sudo docker run -d -p 1010:80 --name website -v $PWD/website:/var/ www/html/website:rw chen/nginx nginx #"chen" is porperty's name. "-v" allows us to load host directory as a volume into the container.write_dockerfile(){ echo '''#Create a usual website with docker#auth cheng#date 2017.7.26FROM ubuntuMAINTAINER chen "chenjiacheng@andlinks.com"ENV REFRESHED_AT 2014-06-01RUN apt-get -yqq update && apt-get -yqq install nginxRUN mkdir -p /var/www/html/websiteADD nginx/global.conf /etc/nginx/conf.d/ADD nginx/nginx.conf /etc/nginx/nginx.confEXPOSE 80 ''' > Dockerfile}
阅读全文
0 0
- Docker 简明笔记
- Docker简明教程
- Docker简明教程
- docker笔记
- Docker笔记
- Docker笔记
- Docker笔记
- Docker笔记
- docker笔记
- Docker 笔记
- Docker笔记
- Docker笔记
- docker 笔记
- docker笔记
- docker笔记
- docker笔记
- Docker笔记
- docker 笔记
- oralce字符窜转变为数组
- 垃圾回收的一点小知识
- 【中间件1】在Windows下搭建RocketMQ
- JVM- 类加载过程
- linux查看java jdk安装路径和设置环境变量
- Docker 简明笔记
- 阿里云短信服务
- 最大距离
- linux基本操作—vi编辑器
- java集合篇总结
- Charles使用大全之app(一)
- C/C++中的结构体
- RocketMQ 消息队列单机部署及使用
- 玩转虚拟机下的linux