Docker的安装和简单使用


=Start=

# 在 Mac OS X 上安装 Docker
## 通过 homebrew 进行安装
brew search docker
brew info docker
brew cask info docker
brew cask install docker docker-toolbox

然后通过快捷键’F4’,输入关键字’docker’,点击出现的’Docker应用’即可启动Docker后台进程。之后可以通过命令查看Docker的一些信息:

docker info
docker version
...
docker help
## 通过 dmg/pkg 进行安装

https://download.docker.com/mac/stable/Docker.dmg
https://docs.docker.com/docker-for-mac/#/step-1-install-and-run-docker-for-mac
https://docs.docker.com/v1.10/mac/step_one/
https://www.docker.com/products/docker-toolbox

# 在 CentOS 上安装 Docker
## CentOS 7
$ sudo yum install docker
## CentOS 6.x (kernel must be 3.10 at minimum)
$ sudo yum -y remove docker
$ sudo yum install docker-io #不一定是最新版Docker
$ sudo yum update
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
$ sudo yum install docker-engine
$ sudo service docker start
$ sudo docker run hello-world
或
$ sudo yum update
$ curl -fsSL https://get.docker.com/ | sh
$ sudo service docker start
$ sudo docker run hello-world
# 一些 Docker 相关的概念

Docker有三个组件和三个基本元素。

三个组件分别是:
  1. Docker Client 是用户界面,它支持用户与Docker Daemon之间通信。
  2. Docker Daemon运行于主机上,处理服务请求。
  3. Docker Index是中央registry,支持拥有公有与私有访问权限的Docker容器镜像的备份。
三个基本要素分别是:
  1. Docker Containers负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。
  2. Docker Images是一个只读模板,用来运行Docker容器。
  3. DockerFile是文件指令集,用来说明如何自动创建Docker镜像。

使用 Docker 运行任何应用程序,都需要有两个基本步骤:

  1. 构建一个镜像。[每个镜像都源于一个基本的镜像,然后根据Dockerfile中的指令创建模板。对于每个指令,在镜像上创建一个新的层面。]
  2. 运行容器。[运行容器源于我们在第一步中创建的镜像。当容器被启动后,一个读写层会被添加到镜像的顶层。当分配到合适的网络和IP地址后,需要的应用程序就可以在容器中运行了。]
# 制作 Docker 镜像
# 使用预先构建的镜像来创建来一个镜像并运行该容器
sudo docker images
sudo docker pull busybox
docker run busybox /bin/echo Hello Docker
# 以后台进程的方式运行 Docker
sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done")

# 运行`docker logs`命令来查看job的当前状态
docker logs $sample_job

# 停止指定容器
docker stop $sample_job
# 重启指定容器
docker restart $sample_job
# 完全移除容器(先停止再删除)
docker stop $sample_job
docker rm $sample_job
# 将容器的状态保存为镜像
docker commit $sample_job job1
# 查看本地的所有镜像
docker images

# 在Docker registry中搜索镜像
docker search (image-name)

# 查看镜像的历史版本
docker history (image_name)
# 将镜像推送到registry
docker push (image_name)

=END=

, ,

《“Docker的安装和简单使用”》 有 29 条评论

  1. 在 Docker 里跑 Java,趟坑总结
    http://www.toutiao.com/i6403109459287081474/
    `
    精简阅读版:
    a.JVM 做不了内存限制,一旦超出资源限制,容器就会出错
    b.即使你多给些内存资源,也没什么卵用,只会错上加错
    c.解决方案:用 Dockfile 中的环境变量来定义 JVM 的额外参数
    d.更进一步:使用由 Fabric8 社区提供的基础 Docker 镜像来定义 Java 应用程序,将始终根据容器调整堆大小
    `

  2. 技术分享|攻击容器集群管理平台
    https://mp.weixin.qq.com/s?__biz=MzIxNDI0MDAxNg==&mid=2247483860&idx=1&sn=e1593b50741e5071182d5a9886348c1a
    https://0x0d.im/archives/attack-container-management-platform.html
    `
    文中主要介绍了 Kubernetes 和 Mesos 未授权漏洞的利用方式和获得宿主机权限的攻击方式。容器管理平台未授权访问不仅会泄露容器中的代码、数据库等敏感文件,还有可能导致宿主机被控制进入内网,产生更大的危害。

    参考「Security Best Practices for Kubernetes Deployment」,在安装和运行容器管理平台时,遵循以下几点可提高安全性:
    · 配置防火墙,禁止敏感端口对外开放
    · 对管理端口加上认证
    · 使用安全的镜像(私有镜像仓库)
    · 设置容器资源限额
    · 容器以非 root 用户运行
    `
    http://blog.kubernetes.io/2016/08/security-best-practices-kubernetes-deployment.html

  3. 用于为容器构建安全、便携和干净操作系统的工具包(A toolkit for building secure, portable and clean operating systems for containers)
    https://github.com/linuxkit/linuxkit #可以参考学习一下里面对于很多软件的配置是什么样的

  4. Docker 最佳实践:构建最小镜像
    https://mp.weixin.qq.com/s/4hGUhEc5XrEg2SSD2mcVrg
    https://toutiao.io/posts/l3lmag/preview
    https://paper.tuisec.win/detail/8a27a68dfe0369d
    `
    镜像大小其实是衡量我们容器打包技术的重要指标,我们应该在不影响应用正常运行的情况下,尽量让我们的容器镜像变得更小,这样,不管是从安全还是维护效率角度来讲,都是最佳实践。

    本文我们从两种情况阐述我们的问题和解决方案,我们从实现我们的application的编程语言角度,按照语言是解释型还是编译型语言来演示如何解决容器镜像体积大的问题。

    所以,我们每次build自己的docker image的时候,一定要思考一下,怎么才能让我们的docker image变得更加小巧,更小的image其实也是更安全的,因为冗余的软件包少,那么漏洞就相应的少,另外小的docker image方便移动,不管是docker push还是pull,速度都很快。
    `

  5. 如何Docker化任意一个应用?你需要参照这10步
    https://mp.weixin.qq.com/s/bJX6DVEhM7Ti11tIgjUSsQ
    `
    这是一篇关于如何 Docker 化任何应用程序的十步清单。
    网上有很多关于如何将应用 Docker 化的教程,为什么我还要再写一个呢?
    我见过的大部分教程都是限定在某种特定技术(例如 Java 或者 Python),可能无法满足读者的需求。同时,这些教程也没有说清楚关于 Dev 和 Ops 团队之间建立明确约定所涉及到的所有相关方面(这正是容器化的精髓所在)。
    我根据最近的经验总结了以下一些步骤。它是一份细节清单,包含了其他指南中忽略的内容。

    1.选择基础镜像
    2.安装必要软件包
    3.添加自定义文件
    4.定义容器运行时的用户权限
    5.定义暴露的端口
    6.定义入口点(entrypoint)
    7.定义一种配置方式
    8.外部化数据
    9.确保处理好日志
    10.轮转日志和其他仅追加文件
    `

  6. [译] 十大 Docker 反模式
    https://mp.weixin.qq.com/s/K68G-AbNbHceD8MWmBjtvw
    https://codefresh.io/containers/docker-anti-patterns/
    `
    要考察的不良实践的完整清单:
    试图将 VM 实践用于容器
    创建不透明的 Dockerfile
    创建有副作用的 Dockerfile
    混淆了用于开发的镜像和用于部署的镜像
    为每个环境创建一个不同的镜像
    在生产服务器上拉取 git 代码并在线构建镜像
    基于 git 源码而非 Docker 镜像进行团队协作
    在容器镜像中硬编码密钥和配置
    大而全-把 Docker 用作穷人的 CI/CD
    小而不美-把容器只当成打包工具用

    反模式 1 – 把 Docker 容器视为虚拟机
    反模式 2 – 创建不透明的 Docker 镜像
    反模式 3 – 创建有副作用的 Dockerfile
    反模式 4 – 混淆了用于开发的镜像和用于部署的镜像
    反模式 5 – 为每个环境创建一个不同的镜像 (QA、stage、production)
    反模式 6 – 在生产服务器上创建 Docker 镜像
    反模式 7 – 基于 git 源码而非 Docker 镜像进行团队协作
    反模式 8 – 在容器镜像中硬编码密钥和配置
    反模式 9 – 创建大而全的 Dockerfile
    反模式 10 – 创建小得可怜的 Dockerfile
    `
    https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

  7. Error: Permission denied @ apply2files – /usr/local/lib/docker/cli-plugins

    How to fix the Homebrew error `Permission denied @ apply2files`
    https://flaviocopes.com/homebrew-fix-permission-denied-apply2files/
    `
    Turns out I had deleted Docker recently and this was causing an error. What I did to fix was to recreate a folder of the Docker app:

    $ mkdir -p /Applications/Docker.app/Contents/Resources/cli-plugins

    and running

    $ brew cleanup

    Again. The issue was fixed.
    `

    Homebrew – Error: Permission denied @ apply2files – /usr/local/lib/docker/cli-plugins
    https://stackoverflow.com/questions/72784094/homebrew-error-permission-denied-apply2files-usr-local-lib-docker-cli-pl

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注