liuhongyu 发表于 2018-5-26 08:53:54

docker容器安装

  什么是docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同VM的方式不同, LXC 其并不是一套硬件虚拟化方法 - 无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。所以我们从虚拟化要docker要解决的问题出发,看看他是怎么满足用户虚拟化需求的。
那什么又是lxc呢?
lxc容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。说白了就是所有的设备都是完全寄宿与宿主机
  先安装lxc
环境CentOS 6.5 x64
1、安装LXC
yum -y install epel*       #安装epel库
yum install libcgroup lxc lxc-templates --enablerepo=epel      #安装lxc
/etc/init.d/cgconfig start
2、检查环境
lxc-checkconfig    #检查CPU是否支持lxc虚拟化,输出如下即是ok的
Kernel configuration not found at /proc/config.gz; searching…
Kernel configuration found at /boot/config-2.6.32-431.1.2.0.1.el6.x86_64
— Namespaces —
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/ptsinstances: enabled
  — Control groups—
Cgroup: enabled
Cgroup namespace: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
  — Misc —
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config/usr/bin/lxc-checkconfig
  lxc的默认安装模板
/usr/share/lxc/templates/ 下有好几个模板可供选择,这是自带的模板
  lxc的默认安装位置
/var/lib/lxc/
  lxc的主配置文件
vi /etc/lxc/default.conf    #一般要是指定lxc的网络配置参数,此处还需要一个知识点就是宿主机的虚拟网卡,就不再做详细介绍
lxc.network.type = veth                  #网卡类型 veth只是桥接网卡的一个类型,可以与任何机器(宿主机,其他虚拟机,局域网其他机器)通讯。
lxc.network.link = br0                   #桥接宿主机网卡名
lxc.network.flags = up
lxc.network.name = eth0
lxc.network.ipv4 = 192.168.1.61/24      #此处为虚拟机的网卡ip
lxc.network.ipv4.gateway = 192.168.1.254
  3、lxc的一些常用的命令
lxc-attach       lxc-checkconfiglxc-console      lxc-execute      lxc-ls         lxc-start      lxc-unfreeze   lxc-wait
lxc-autostart    lxc-clone      lxc-create       lxc-freeze       lxc-monitor      lxc-stop         lxc-unshare      
lxc-cgroup       lxc-config       lxc-destroy      lxc-info         lxc-snapshot   lxc-top          lxc-usernsexec
  此处我借用软件自带的centos模板创建一个虚拟机
lxc-create -n centos1 -t centos    #创建的名字叫centos1
lxc-start -n centos1               #启动centos1
  启动后就可以进行操作我们的虚拟机了
  centos6.5
下面我们说说docker的安装和使用
1、禁用selinux
由于Selinux和LXC有冲突,所以需要禁用selinux。编辑/etc/selinux/config,设置两个关键变量
vim /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
2、配置Fedora EPEL源
yum install http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
3、添加hop5.repo源
cd /etc/yum.repos.d
wget http://www.hop5.in/yum/el6/hop5.repo
4、安装Docker
yum install docker-io
  此处已经是安装完成了,可是使用docker命令进行测试了
  5、手动挂载cgroup
CentOS环境中运行docker、lxc,需要手动重新挂载cgroup。
service cgconfig stop             # 关闭服务
chkconfig cgconfig off            # 取消开机启动
vi /etc/fstab
none /cgroup cgroup defaults 0 0          # 添加此行,开机后自动挂载
  6、启动docker服务
service docker start
chkconfig docker on
  7、docker的一些常用命令
docker pull <镜像名:tag> #从官网拉取镜像
docker search <镜像名> #搜索在线可用镜像名
docker top <container> #显示容器内运行的进程
docker images #查询所有的镜像,默认是最近创建的排在最上。
docker ps #查看正在运行的容器
docker ps -l #查看最后退出的容器的ID
docker ps -a #查看所有的容器,包括退出的。
docker logs {容器ID|容器名称} #查询某个容器的所有操作记录。
docker logs -f {容器ID|容器名称} #实时查看容易的操作记录。
docker rm$(docker ps -a -q) #删除所有容器
docker rm <容器名or ID> #删除单个容器
docker rmi <ID> #删除单个镜像
docker rmi$(docker images | grep none | awk '{print $3}' | sort -r) #删除所有镜像
docker stop <容器名or ID> #停止某个容器
docker start <容器名or ID> #启动某个容器
docker kill <容器名or ID> #杀掉某个容器
  8、docker search centos7         #列出官网可用centos7的所有镜像,根据自身需求拉取
docker pull oogatta/centos7_64_vagrant      #拉取一个镜像
docker images                               #查看所有的镜像
REPOSITORY                   TAG               IMAGE ID            CREATED             VIRTUAL SIZE
oogatta/centos7_64_vagrant   latest            e415131e31fb      9 weeks ago         898 MB
docker run -i -t docker pull oogatta/centos7_64_vagrant /bin/bash    #运行docker pull oogatta/centos7_64_vagrant 服务器
  做MySQL镜像
制作镜像依靠docker的Dockerfile文件
我们首先下载centos的镜像
1、docker pull centos
# docker images
REPOSITORY          TAG               IMAGE ID            CREATED             VIRTUAL SIZE
centos            centos5             5a1ebaa356ff      2 weeks ago         484 MB
centos            centos7             70214e5d0a90      3 weeks ago         224 MB
centos            latest            70214e5d0a90      3 weeks ago         224 MB
centos            centos6             68eb857ffb51      3 weeks ago         212.7 MB
2、制作一个MySQL的容器,
首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下
vim Dockerfile
FROM centos:centos6            #利用我们的centos:centos6为镜像模板
MAINTAINER Fanbin Kong &quot;kongxx@hotmail.com&quot;

RUN yum install -y mysql:server mysql               #yum安装
RUN /etc/init.d/mysqld start &&\                  #启动
mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'letmein';"&&\                # 授权
mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'letmein';"&&\
mysql -u root -pletmein -e "show databases;"                   #指定用户名和密码
EXPOSE 3306                        
CMD ["/usr/bin/mysqld_safe"]
  3、在Dockerfile所在目录下运行build命令来生成image文件,这里使用mysql:mysql-server作为image文件名
docker build -t mysql:mysql-server .
4、再次查看镜像
# docker images
REPOSITORY          TAG               IMAGE ID            CREATED             VIRTUAL SIZE
mysql               mysql-server      134b2876c7fd      45 minutes ago      625.1 MB
centos            centos5             5a1ebaa356ff      2 weeks ago         484 MB
centos            centos7             70214e5d0a90      3 weeks ago         224 MB
centos            latest            70214e5d0a90      3 weeks ago         224 MB
centos            centos6             68eb857ffb51      3 weeks ago         212.7 MB
已经做好MySQL的镜像   
5、启动容器
docker run --name=mysqlserver -d -P mysql:mysql-server
启动完容器后,可以使用“sudo docker ps”来查看,此时可以看PORTS列内容为“0.0.0.0:49153->3306/tcp”,容器的3306端口会被映射到宿主机器的49153端口,这样我们就可以通过宿主机器的49153端口来连接了
  备注:
mysql -h <宿主机器> -u root -pletmein -P 49153
另外在运行容器的时候也可以通过下面的命令来修改端口映射
docker run --name=mysqlserver -d -p 3306:3306 mysql:mysql-server
此时容器的3306端口会被映射到宿主机器的3306端口,这样我们就可以通过宿主机器的3306端口访问mysql了
还有一种情况就是为了安全考虑,我只希望当前的宿主机器可以访问mysql服务,此时我们可以
docker run --name=mysqlserver -d -p 127.0.0.1:3306:3306 mysql_server
  安装ssh和Apache
# vim Dockerfile

sshd
  #

VERSION               0.0.1
  FROM      centos:latest
MAINTAINERFisher via &quot;sudops.com&quot;
  RUN         yum install -y --nogpgcheck openssh openssh-server httpd net-tools
RUN         echo 'root:mypwd' |chpasswd
RUN         ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN         ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN         sed -i &quot;/ServerName www.example.com:80/a\ServerName 0.0.0.0:80&quot; /etc/httpd/conf/httpd.conf
EXPOSE      22
EXPOSE      80
CMD         /usr/sbin/sshd -D
页: [1]
查看完整版本: docker容器安装