Docker入门(CentOS7)

1、docker安装
yum -y install bash-completion     #tab键补齐包
yum install net-tools -y
yum -y install wget
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
[root@docker ~]# yum install docker-ce -y     #安装Docker
[root@docker ~]# systemctl start docker.service
[root@docker ~]# vi /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
[root@docker ~]# docker info|version   #查看docker基本信息和版本
[root@docker ~]# docker search cenos   #搜索cenos的docker镜像
[root@docker ~]# vi /etc/docker/daemon.json   #配置docker镜像下载加速使用国内docker镜像源
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
[root@localhost ~]# systemctl restart docker.service   #配置完重启docker使配置生效

2、docker的容器管理
docker run -d -p 80:80 nginx
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
-v 源地址(宿主机):目标地址(容器)
docker stop CONTAINER_ID   #停止容器
docker kill container_name   #杀死容器
[root@docker ~]# docker pull centos:6.8   #下载docker镜像(不指定版本,默认会下载最新版)
[root@docker ~]# docker images   #查看已下载的docker镜像
[root@docker ~]# docker run -it centos:6.8 /bin/bash   #启动一个容器,不指定容器名docker将随机分配一个容器名
[root@docker ~]# docker run -it --name centos_sshd centos:6.8 /bin/bash   #启动一个容器并指定容器名为centos_sshd
[root@docker ~]# docker ps -a   #查看docker容器状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eaf08454395c centos:6.8 "/bin/bash" 2 minutes ago Up 2 minutes centos6.8
[root@docker ~]# docker inspect centos_sshd|eaf08454395c   #查看容器的配置信息
[root@docker ~]# docker inspect --format '{{ .NetworkSettings.IPAddress }}' centos_sshd   #查看容器IP
[root@docker ~]# docker exec -it centos6.8|eaf08454395c /bin/bash   #进入容器(指定容器名和容器id都可以)
[root@docker ~]# docker attach centos6.8|eaf08454395c /bin/bash   #进入容器(使用同一个终端)
ctrl + p再按ctrl + q退出容器并返回宿主机
[root@docker ~]# docker rm -f eaf08454395c   #删除一个容器
[root@docker ~]# docker rm -f `docker ps -a -q`   #批量删除容器
注意:docker容器内的第一个进程必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

3、制作容器镜像
[root@aa30c84f20b9 /]# yum install openssh-server -y
[root@aa30c84f20b9 /]# yum install httpd -y
[root@aa30c84f20b9 /]# /etc/init.d/sshd start    #初始化ssh服务并生成密钥对,否则不能ssh连接
[root@localhost ~]# docker commit aa30c84f20b9 centos_sshd_httpd:v1    #制作一个容器镜像
sha256:e8ea675ba1d002de5019d743281c052130c17cc9feedda4ab839b9bf262847e2
[root@docker ~]# docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
容器id或容器名 新的镜像名字[:版本号可选]
[root@6f15becdbbd2 /]# cat init.sh
#!/bin/bash
echo "123456"|passwd --stdin root
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@docker ~]# docker run -d -p 80:80 -p 1022:22 --name centos_sshd_httpd centos_sshd_httpd:v1 /init.sh   #通过脚本同时启动容器中的多个服务
-d:放在后台运行
-p:端口映射(宿主机端口:容器的端口,--name:设置容器名)
[root@docker ~]# docker save centos_sshd_httpd >centos_ssh_httpd.tar.gz    #保存容器镜像
[root@docker ~]# docker image rm -f centos_sshd_httpd       #删除镜像
[root@docker ~]# docker image load -i centos_ssh_httpd.tar.gz      #导入镜像
0f0fd98df580: Loading layer [==================================================>] 128.6MB/128.6MB
Loaded image: centos_sshd_httpd:v1

4、dockerfile自动构建docker镜像
dockerfile主要组成部分:
基础镜像信息 FROM:centos:6.8
制作镜像操作指令 RUN yum install openssh-server -y
容器启动时执行指令 CMD ["/bin/bash"]
dockerfile常用指令:
FROM 这个镜像的妈妈是谁?(指定基础镜像)
LABEL 告诉别人,谁负责养它?(指定维护者信息,可以没有)
RUN 你想让它干啥(在命令前面加上RUN即可)
ADD 给它点创业资金(复制文件,会自动解压)
WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
使用ADD的时候,ADD init.sh /init.sh(init.sh文件必须放在Dockerfile同级目录下!!!)
dockerfile其他指令:
COPY 复制文件 (复制文件,不会自动解压)
ENV 环境变量
ENTRYPOINT 容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)

[root@docker dockerfile]# vi Dockerfile
FROM centos:6.8
RUN yum install openssh-server -y
RUN /etc/init.d/sshd start
RUN yum install httpd -y
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
[root@docker dockerfile]# vi init.sh
#!/bin/bash
/etc/init.d/httpd start
echo "123456"|passwd --stdin root
/usr/sbin/sshd -D
[root@docker dockerfile]# ll
total 8
-rw-r--r--. 1 root root 152 Mar 20 10:27 Dockerfile
-rw-r--r--. 1 root root 91 Mar 20 11:02 init.sh
[root@docker ~]# docker build -t centos_sshd_httpd:v2 .    #利用Dockfile文件创建镜像,. 表示Dockerfile文件在当前目录
---> d4ba7df51af6
Step 3/6 : RUN /etc/init.d/sshd start
---> Running in 547cad2caecc
Generating SSH2 RSA host key: [ OK ]
Generating SSH1 RSA host key: [ OK ]
Generating SSH2 DSA host key: [ OK ]
Starting sshd: [ OK ]
Removing intermediate container 547cad2caecc
---> a3815ee38b0c
[root@docker ~]# docker run -d -p 80:80 -p 1022:22 --name centos_dockerfile centos_sshd_httpd:v2
[root@docker dockerfile]# vi init.sh     #设置root密码从环境变量中读入
#!/bin/bash
/etc/init.d/httpd start
echo "$password"|passwd --stdin root
/usr/sbin/sshd -D
[root@docker ~]# docker run -d -p 81:80 -p 2022:22 --name centos_docker -e password=test123 centos_sshd_httpd:v2   #设置root密码为test123
注意:
用Dockerfile文件创建的镜像不能从宿主机ssh登陆,否则会有以下错误
[root@docker dockerfile]# ssh 10.47.39.100 -p 1022
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:HoZcYKgbOtzM70y2uPURVaSkKaqPZNd6lG5GQjAjorU.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending RSA key in /root/.ssh/known_hosts:3
RSA host key for [10.47.39.100]:1022 has changed and you have requested strict checking.
Host key verification failed.
[root@docker ~]# docker run -d -p 80:80 -p 1022:22 -h Nginx -e password=test123 --name centos6.8 centos_sshd_httpd:v2   #-h:指定主机名;--name:指定容器名

5、docker-compose(单机版的容器编排工具)
yum install -y python2-pip(需要epel源)
pip install docker-compose
##docker-compose配置文件详解
http://www.jianshu.com/p/2217cfed29d7

cd my_wordpress/
vi docker-compose.yml
version: '3'

services:
db:
image: mysql:5.7
volumes:
- /oldboy:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
#启动
docker-compose up
#后台启动
docker-compose up -d

6、重启docker服务,容器全部退出的解决办法
方法一:docker run --restart=always
方法二:"live-restore": true
docker server配置文件/etc/docker/daemon.json参考
{
"registry-mirrors": ["http://b7a9017d.m.daocloud.io"],
"insecure-registries":["10.0.0.11:5000"],
"live-restore": true
}

docker + k8s的博客文章
http://www.cnblogs.com/CloudMan6/p/6693772.html
https://github.com/feiskyer/kubernetes-handbook/blob/master/zh/SUMMARY.md
https://github.com/feiskyer/kubernetes-handbook
k8s安装方法:
go源码编译安装
二进制安装 (比较适合)
yum 安装 1.5 (比较适合)
kubeadm(容器化部署,)
minikube(学习k8s)

docker学习链接:
第一篇:
http://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html
第二篇:
http://www.cnblogs.com/zhenyuyaodidiao/p/6500720.html
第三篇:
http://www.cnblogs.com/zhenyuyaodidiao/p/6500897.html
第四篇:
https://www.cnblogs.com/breezey/p/6553738.html
第五篇:
http://www.cnblogs.com/breezey/p/6556913.html

 

posted @ 2018-03-20 10:28  風£飛  阅读(273)  评论(0编辑  收藏  举报