首页 > 代码库 > Docker 学习笔记

Docker 学习笔记

安装

centos

 前提:内核必须为3.0以上、x64系统


通过以下命令查看您的 CentOS 内核:


uname -r


如果执行以上命令后,输出的内核版本号低于 3.8,请参考下面的方法来来升级您的 Linux 内核。


对于 CentOS 6.5 而言,内核版本默认是 2.6。首先,可通过以下命令安装最新内核:


rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm

yum -y --enablerepo=elrepo-kernel install kernel-lt


随后,编辑以下配置文件:


vi /etc/grub.conf


将default=1修改为default=0。


最后,通过reboot命令重启操作系统。


重启后如果不出意外的话,再次查看内核,您的 CentOS 内核将会显示为 3.10。


如果到这里,您和我们所期望的结果是一致的。恭喜您!下面我们就一起来安装 Docker 了。

安装 Docker


只需通过以下命令即可安装 Docker 软件:


rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

yum -y install docker-io


可使用以下命令,查看 Docker 是否安装成功:

docker version

docker -d

yum install libdevmapper.so.1.02

若输出了 Docker 的版本号,则说明安装成功,我们下面就可以开始使用 Docker 了。


可通过以下命令启动 Docker 服务:


service docker start


docker run centos


a


Ubuntu

 一、安装Docker的先决条件


1、运行64位CPU构架的计算机(目前只能是x86_64和amd64),请注意,Docker目前不支持32位CPU。

2、运行Linux 3.8或更高版本内核。一些老版本的2.6.x或其后的内核也能够运行Docker,但运行结果会有很大的不同。而且,如果你需要就老版本内核寻求帮助时,通常大家会建议你升级到更高版本的内核。

3、内核必须支持一种适合的存储驱动(storage driver),例如:

Device Manage;AUFS;vfs;btrfs;ZFS

默认存储驱动通常是Device Mapper或AUFS

4、内核必须支持并开启cgroup和命名空间(namespace)功能。


检查Ubuntu内核版本

[zhaojq@virtual-machine]# uname -a

Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

检查Device Mapper

[zhaojq@virtual-machine]# ls -l /sys/class/misc/device-mapper 

lrwxrwxrwx 1 root root 0 Jun 20 22:42 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper


二、安装Docker

添加Docker的ATP仓库

[zhaojq@virtual-machine]# sudo sh -c "echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list"

[zhaojq@virtual-machine]# whereis curl

curl: /usr/bin/curl /usr/share/man/man1/curl.1.gz


增加Docker仓库的新GPG密钥

[zhaojq@virtual-machine]# sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Executing: /tmp/tmp.Uskaff1gz8/gpg.1.sh --keyserver

hkp://p80.pool.sks-keyservers.net:80

--recv-keys

58118E89F3A912897C070ADBF76221572C52609D

gpg: 下载密钥‘2C52609D’,从 hkp 服务器 p80.pool.sks-keyservers.net

gpg: 密钥 2C52609D:公钥“Docker Release Tool (releasedocker) <docker@docker.com>”已导入

gpg: 合计被处理的数量:1

gpg: 已导入:1  (RSA: 1)



更新APT软件包索引

[zhaojq@virtual-machine]# sudo apt-get update


安装Docker

[zhaojq@virtual-machine]# sudo lsb_release --codename | cut -f2       

xenial

[zhaojq@virtual-machine]# sudo sh -c "echo deb https://apt.dockerproject.org/repo ubuntu-xenial main > /etc/apt/sources.list.d/docker.list"

[zhaojq@virtual-machine]# cat /etc/apt/sources.list.d/docker.list

deb https://apt.dockerproject.org/repo ubuntu-xenial main

[zhaojq@virtual-machine]# sudo apt-get update 

[zhaojq@virtual-machine]# sudo apt-get install docker-engine

[zhaojq@virtual-machine]# sudo docker info



1.安装ubuntu 维护的版本

  sudo apt-get install docker.io

  source /etc/bash_completion.d/docker.io

2.安装docker 维护的版本(较新)

 首先得满足两个条件:

  系统内核大于3.8  x64


 3.不使用sudo 运行docker

 sudo groupadd docker

 sudo gpasswd -a xiaopeng docker

 sudo service docker restart









一、docker 的基本组成:

    docker 客户端/守护进程

    docker 镜像 (打包阶段)

    docker 容器(通过镜像启动、启动和执行阶段)

    docker 仓库(共有dockerHub、私有)

二、相关命令

1. 查看docker信息(version、info)

# 查看docker版本  

$docker version  

  

# 显示docker系统的信息  

$docker info  


2. 对image的操作(search、pull、images、rmi、history)

# 检索image  

$docker search image_name  

  

# 下载image  

$docker pull image_name  

  

# 列出镜像列表; -a, --all=false Show all images; --no-trunc=false Don‘t truncate output; -q, --quiet=false Only show numeric IDs  

$docker images  

  

# 删除一个或者多个镜像; -f, --force=false Force; --no-prune=false Do not delete untagged parents  

$docker rmi image_name  

  

# 显示一个镜像的历史; --no-trunc=false Don‘t truncate output; -q, --quiet=false Only show numeric IDs  

$docker history image_name  


3. 启动容器(run)

docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。

# 在容器中运行"echo"命令,输出"hello word"  

$docker run image_name echo "hello word"  

  

# 交互式进入容器中  

$docker run -i -t image_name /bin/bash  

  

  

# 在容器中安装新的程序  

$docker run image_name apt-get install -y app_name  



Note:  在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。



4. 查看容器(ps)

# 列出当前所有正在运行的container  

$docker ps  

# 列出所有的container  

$docker ps -a  

# 列出最近一次启动的container  

$docker ps -l  


**************************************************************************

查看运行容器的IP地址:

sudo docker inspect  -f ‘{{.NetworkSettings.IPAddress}}‘ a9d6bc(容器ID)

**************************************************************************


5. 保存对容器的修改(commit)


当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。

# 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message  

$docker commit ID new_image_name  



Note:  image相当于类,container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image。






6. 对容器的操作(rm、stop、start、kill、logs、diff、top、cp、restart、attach)


# 删除所有容器  

$docker rm `docker ps -a -q`  

  

# 删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container  

$docker rm Name/ID  

  

# 停止、启动、杀死一个容器  

$docker stop Name/ID  

$docker start Name/ID  

$docker kill Name/ID  

  

# 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps  

$docker logs Name/ID  

  

# 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的  

$docker diff Name/ID  

  

# 显示一个运行的容器里面的进程信息  

$docker top Name/ID  

  

# 从容器里面拷贝文件/目录到本地一个路径  

$docker cp Name:/container_path to_path  

$docker cp ID:/container_path to_path  

  

# 重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10  

$docker restart Name/ID  

  

# 附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process  

$docker attach ID  



Note: attach命令允许你查看或者影响一个运行的容器。你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来,是从CTRL-C。






7. 保存和加载镜像(save、load)



当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。

# 保存镜像到一个tar包; -o, --output="" Write to an file  

$docker save image_name -o file_path  

# 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file  

$docker load -i file_path  

  

# 机器a  

$docker save image_name > /home/save.tar  

# 使用scp将save.tar拷到机器b上,然后:  

$docker load < /home/save.tar  


8、 登录registry server(login)

# 登陆registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Username  

$docker login  



9. 发布image(push)

# 发布docker镜像  

$docker push new_image_name  



10.  根据Dockerfile 构建出一个容器


#build  

      --no-cache=false Do not use cache when building the image  

      -q, --quiet=false Suppress the verbose output generated by the containers  

      --rm=true Remove intermediate containers after a successful build  

      -t, --tag="" Repository name (and optionally a tag) to be applied to the resulting image in case of success  

$docker build -t image_name Dockerfile_path





三、Docker技术原理

 Namespace  是一种Linux内核技术,用来实现资源的隔离

   主要隔离:文件系统、PID、UTS、网络、用户

 CGroup   

   资源限制(内存、cpu)、优先级控制、资源统计、进程控制



四、docker 网络

 (1)容器拥有独立的网络






**********************************************************************************************************************

希云Docker培训笔记

docker run  -P(重启后端口映射会变化)

            -p(重启后端口映射不会变化)




docker run -d -p 80:80 --name wordpress  -e WORDPRESS_DB_HOST=192.168.239.136 -e WORDPRESS_DB_USER=admin -e WORDPRESS_DB_PASSWORD=csphere2015 csphere/wordpress:4.2



Jenkins

  docker build -t csphere/php-fpm:5.4 $WORKSPACE/php-fpm

身份验证令牌

  java-token


docker run -d -p 8080:8080 --name jenkins -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /root/maven-tar:/root csphere/jenkins:1.609





REGISTRY_URL=192.168.239.135

cp /home/xiaopeng/apache-maven-3.5.0-bin.tar.gz $WORKSPACE/maven

docker build -t csphere/maveb:3.5.0 $WORKSPACE/maven

if docker ps -a | grep -i maven ; then

   docker rm -f maven

fi

docker create --name maven csphere/maven:3.5.0

docker cp maven:/hello/target/hello.war $WORKSPACE/hello

docker build -t $REGISTRY_URL/csphere/hello:1.0 $WORKSPACE/hello

docker push $REGISTRY_URL/csphere/hellp:1.0

if docker ps -a | grep -i hello; then

   docker rm -f hello

fi

docker run -d -p 80:8080 --name hello $REGISTRY_URL/csphere/hello:1.0













   


本文出自 “Mr-G运维知识库” 博客,转载请与作者联系!

Docker 学习笔记