docker随笔
#查看历史执行命令
[root@docker01 data]# history
#查看yum历史记录
yum provides sshd
----------第一-----------
安装:
1、修改 hostname 和 ip
[root@oldboy ~]# vim hostname.sh
配置文件
#!/usr/bin/sh
if [ $# -ne 2 ];then
echo "/bin/sh $0 hostname PartIP"
exit 1
fi
hostnamectl set-hostname $1
sed -i "s#12#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]
systemctl restart network
bash
source /etc/profile
运行:
[root@oldboy ~]# sh hostname.sh docker01 11
-----------
2、重新连接后
rm -fr /etc/yum.repos.d/epel.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -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.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
2、systemctl start docker
3、systemctl enable docker
4、vi /etc/yum.repos.d/epel.repo
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
5、 systemctl enable docker
启动一个容器(必须需要制定镜像名称与版本)
6、docker run -d -p 80:80 nginx (nginx 为镜像名称)
#pull 镜像名称 版本
run(创建并运行一个容器)
-d 放在后台
-p 端口映射 (把数组及的端口映射的容器端口)
nginx docker镜像的名字
PS: docker run -d -p 80:80 nginx 等同于 docker run -d -p 80:80 nginx:latest(latest版本号,默认不全最新版)
如果想下载指定1.14版本 可以写 docker run -d -p 80:80 nginx:1.14
---------------------------------
---------------------第二---------------------
镜像操作:
镜像的命令都放在:image 里面
-查看: docker image
1、搜索镜像
docker search 搜索对象
例如:docker search python(搜索python镜像)
-优先考虑官方
-其次stars数量最多
2、镜像拉取
docker pull 镜像名称:版本(版本指定默认使用最新版)
镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com
例如:
1、官方:
docker pull centos:6.8(没有指定版本,默认会下载最新版)
2、第三方:(需要加上域名 daocloud.io )
docker pull daocloud.io/huangzhichong/alpine-cn:latest
3、查看镜像:
-docker images
-docker image ls
4、删除镜像
docker image rm 镜像名称:版本号
例子:docker image rm centos:latest
5、导出镜像
docker save 镜像名称:版本 > abc.tar.gz (接收对象)
例子:1、docker image save centos > docker-centos7.4.tar.gz (重定向方法)
2、docker image save centos -o docker-centos7.4.tar.gz (-o 参数方法)
6、导入镜像
docker load -i 导入对象
例子:docker image load -i docker-centos7.4.tar.gz
----------------END------------------
--------第三---------
容器相关操作
镜像的命令都放在:container 里面
-查看: docker container
前提:
-启动容器依赖于镜像
镜像:包含linux发型版本系统文件、nginx软件 (就像结合到一起,打包成一个压缩包)
-容器:基于镜像,启动一个进程,文件(容器运气是产生)
-总结: 容器在使用镜像是 镜像是出于可读的,不可写,所以镜像不会被改变
1、启动一个容器有两种方式(必须需要制定镜像名称与版本)
1、docker run -d -p 80:80 nginx (nginx 为镜像名称)
#pull 镜像名称 版本
run(创建并运行一个容器)
-d 放在后台
-p 端口映射 (把数组机的端口:映射的容器端口)
nginx docker镜像的名字
PS: docker run -d -p 80:80 nginx 等同于 docker run -d -p 80:80 nginx:latest(latest版本号,默认不全最新版)
如果想下载指定1.14版本 可以写 docker run -d -p 80:80 nginx:1.14
2、docker run -it --name centos6 centos:6.9 /bin/bash (centos:6.9-- 镜像名称:版本)
-it 分配交互式的终端 (能直接进入容器里面)
--name 指定容器的名字 (自定义容器名字)
#在镜像后面指定命令
/bin/bash 覆盖容器的初始命令
3、 *****重点*******
#手动进入正在运行的容器里面
-docker container exec -it 容器ID /bin/bash (可以先执行 docker ps 查看容器ID)
例如:[root@docker01 ~]# docker container exec -it b986290524dd /bin/bash
删除容器
docker container rm 容器ID
例如:[root@docker01 ~]# docker container rm b986290524dd
批量删除
-首先拿到容器ID
docker container ls -a -p (接 -p 表示静默输出,返回的全是ID)
-[root@docker01 ~]# docker rm -f `docker ps -a -q`
2、采用第二种方式启动容器并进入
#在容器里的操作不会影响数组机(没有进入容器之前的主机称为 :数组机)
[root@ab486d41d81b /]#
- ab486d41d81b 为容器的主机名
查看容器IP
[root@ab486d41d81b /]# ifconfig
查看所有状态的容器信息:
docker container ls -a
查看运行状态的容器信息:
docker container ls
#打开容器状态可以看到所有哦容器信息
-终止一个运行中的容器
docker stop 容器ID(CONTAINER_ID)
-杀死容器
docker kill 容器名称(container_name)
-重新启动
docker start 容器ID
-重启一个容器
-docker restart 容器ID
3、临时退出容器
-ctrl +p 之后 ctrl + q
#重新返回
docker attach + 容器名称(容器ID)
#总结:
-docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!
-也就是:
docker ps -a -l #查看容器开启的容器当前状态
主要看 STATUS 项
-Exited 死的
-Up About an hour 活的
-----------------------------------
-------------第四---------------
docker容器的网络访问(端口映射)
指定映射(docker 会自动添加一条iptables规则来实现端口映射)
-p 数组机端口:容器端口
1、-p hostPort:containerPort
2、-p ip:hostPort:containerPort 多个容器都想使用80端口
3、-p ip::containerPort(随机端口)
4、-p hostPort:containerPort:udp
5、-p 81:80 –p 443:443 可以指定多个-p
-linux添加ip:
ifconfig eth0:0 10.0.0.12/24 up (表示添加子ip)
PS:#一般上网是输入域名后 没有输入端口(其实是默认使用80端口)
------------------
--------------第五---------------------
#持久化 就算删跟也不怕
docker的数据卷管理:
查看docker-- 卷的命令--:
-docker volume
1、把宿主机的/data目录 挂载到 容器的/usr/share/nginx/html 目录(宿主机目录不存在,则自动在容器中创建)
[root@docker01 ~]# docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest
PS: 宿主机的数据会覆盖 容器目录里的内容
2、查看卷:
docker volume ls
3、创建卷
docker volume create 指定卷名称
4、查看卷的详细属性
docker volume inspect 卷的名称
#可以看到卷的默认数据目录
-‘Mountpoint’
5、挂载卷
[root@docker01 ~]# docker run -d -p 81:80 -v 卷的名称:/usr/share/nginx/html nginx:latest
#总结:
-第一步中的挂载:
/data 不存在,会自动创建, 把/data挂载到 容器 的站点目录, /data目录的数据同步(覆盖)容器中
-第5 步中的挂载
把 卷的名字 挂载到 容器 的站点目录,容器里面的数据听不到卷中
------------------------------------------
-------------第六------------------------
手动将容器保存为镜像:
1、手动制作支持ssh登录的docker
新启动纯净的基础容器
1、docker run -it -p 1022:22 centos:6.9
#安装ssh服务 (在容器里)
2、yum install openssh-server -y
service sshd start
echo "123456"|passwd --stdin root
-ctrl +p 之后 ctrl + q
#重新返回
docker attach + 容器ID
#提交容器给镜像(在容器外)
3、docker commit 镜像ID 镜像名称(自定义):版本(自定义)
4、测试
#/usr/sbin/ssd -D 取消守护进程
docker run -d -p 1023:22 镜像名称:版本 /usr/sbin/sshd -D
5、查看是否夯住:
docker ps -a -l
检验是否成功:
-新开会话
-执行: ssh root@10.0.0.11 1023 回车
-输入密码:123456
#连接成功,并且ec8b9c8dbc28 等同于主会话的容器ID(CONTAINER ID ),那么就成功了
-[root@ec8b9c8dbc28 ~]#
2、手动制作bookManagerSystem的docker
#启动一个基础容器
1、docker run -it -p 8080:8080 python:3.6 /bin/bash
2、查看容器有哪些模块
pip3 list
3、容器部署bms项目
#安装Django (临时加速安装) 具体https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
cd /opt/
#下载项目
wget http://www.qstack.com.cn/bookManageSystem.zip
#解压
unzip bookManageSystem.zip
#进入
cd bookManageSystem
#换源
echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >/etc/apt/sources.list
#查看其使用的操作系统
cat /etc/os-release
#这里看到的是:HOME_URL = "https://wwww.debian.org/support" (debian)
#安装apt-get 及环境
apt-get update #需要先更新缓存(跟新列表)
apt-get install vim -y
#修改配置文件
vim bookManageSystem/settings.py
ALLOWED_HOSTS = ['*']
#消除警告
python manage.py migrate
#启动项目
python manage.py runserver 0.0.0.0:8080
4、把部署好bms项目的容器提交为镜像
docker commit 3e3313968bf7 bms:v1
5、测试
docker run -d -p 8080:8080 bms:v1 python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080
3、基于上一个容器 制作一个支持多服务的docker镜像
1、启动一个基础容器
#因为是基于上一次容器,所以镜像是上一个容器所用
docker run -it -p 8085:8080 -p 1024:22 bms:v1 /bin/bash
2、在容器中安装部署服务
#安装
apt-get install openssh-server
#启动服务
service ssh start
#设置密码
第一种方法:echo 'root:123456'|chpasswd
第二种方法:passwd root
-123
#确认 123
#修改debain安全机制 (取消默认root远程登录)
3、vim /etc/ssh/sshd_config
-PermitRootLogin:yes (改为yes)
#重启
-service ssh restart
****核心***** 解决不能初始化多条的问题
4、由于docker命令初始化只能执行一条,但是可以执行脚本
#编写脚本(堆命令)(nginx脚本没有判断)
vim /init.sh
#!/bin/bash
service ssh start
python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080
PS:编写脚本须知---把行不住的命令写前面,夯不住的写后面
5、把部署好bms项目的容器提交为镜像
docker commit 容器ID bms_ssh:v4
6、测试
#由于是多个docker服务 所以的 -p多次 以空格为分隔符
docker run -d -p 8085:8080 -p 1024:22 bms_ssh:v4 /bin/bash /init.sh
-----------------------
-------------第七-------------
docker 镜像分层 (kvm 链接克隆,写时复制的特性)
镜像分层的好处:复用,节省磁盘空间,相同的内容只需加载一份到内存。
修改dockerfile之后,再次构建速度快
--------------------------------
零碎笔记:
PS: docker pull python:3.6 #不加版本 默认使用最新
docker -a -l 查看容器状态
查看yum缓存 : yum provides sshd
重点:默认一个物理网卡,只有一个物理地址,虚拟多个mac地址
docker还原出厂设置:
#先停止docker服务
1、systemctl stop docker
#把docker数据目录全部删除
2、cd /var/lib/docker
-rm -fr *
#再次重启docker服务
3、systemctl start docker
完成
PS:重启docker就会重新初始化docker,如果想要保留一些镜像,可以在停止docker之前save(保存),初始化之后再load(导入)就行
-保存为.tar.gz 格式
docker save centos_ssh:v1 > dozker_centos_ssh.tar.gz
-直接导入:
docker load -i docker_centos_ssh.tar.gz
-------day2-----dockerfile---------------------
dockerfile主要组成部分:
基础镜像信息 FROM centos:6.9
制作镜像操作指令 RUN yum install openssh-server -y
容器启动时执行指令 CMD ["/bin/bash"]
dockerfile常用指令:
FROM 这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
LABLE 描述,标签
RUN 你想让它干啥(在命令前面加上RUN即可)
ADD 给它点创业资金(会自动解压tar) 制作docker基础的系统镜像
WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
dockerfile其他指令:
COPY 复制文件(不会解压)rootfs.tar.gz
ENV 环境变量
ENTRYPOINT 容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)
参考其他的dockerfile
官方dockerfile或者时速云镜像广场
2、使用dockerfile自动构建镜像:
1、简单版
1、编写dockerfile
FROM centos:6.9
RUM yum install openssh-server -y
RUN service sshd start
RUN echo '123456' |passwd --stdin root
CMD ["/usr/sbin/sshd","-D"]
#构建镜像
2、docker image build -t centos_ssh:v1 .
#测试
3、docker run -d -p 1022:22 centos_ssh:v1
2、进阶版 (多容器)
在dockerfile中新建目录bms_ssh
进入bms_ssh目录:
1、把bookManageSystem.zip 上传到目录下
2、vim init.sh
#!/bin/bash
service ssh start
python /bookManageSystem/manage.py runserver 0.0.0.0:8080
3、vim sources.list
deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
4、vim dockerfile
FROM python:3.6
ADD bookManageSystem.zip /bookManageSystem.zip
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django
RUN unzip /bookManageSystem.zip
RUN sed -i 's#ALLOWED_HOSTS = \[\]#ALLOWED_HOSTS = \["*"\]#g' /bookManageSystem/bookManageSystem/settings.py
RUN python /bookManageSystem/manage.py migrate
ADD sources.list /etc/apt/sources.list
RUN apt-get update
RUN apt-get install openssh-server -y
RUN service ssh start
RUN echo 'root:123456'|chpasswd
RUN echo 'PermitRootLogin yes' >>/etc/ssh/sshd_config
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
5、#构建镜像
docker build -t bms_ssh:v5 .
6、#测试
docker run -d -p 8060:8080 -p 1235:22 bms_ssh:v5
docker registry(私有仓库)
强哥博客:https://www.qstack.com.cn/archives/350.html
1、导入镜像包
registry.tar.gz
2、拉取导入镜像
docker image load -i registry.tar.gz
#停止所有docker服务
3、systemctl restart docker
##普通的registry
4、docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
#重启docker服务
5、systemctl restart docker
PS:重启docker服务 会先停止所有没有加--restart=always 参数的docker服务
--restart=always 如果容器挂了会自动起来
上传镜像到私有仓库:
#给镜像打标签相当于命别名
#格式:docker tag 源镜像名字:版本 私有仓库地址/镜像名字:版本
1、docker tag centos6-sshd:v3 10.0.0.11:5000/centos6-sshd:v3
#上传镜像到私有仓库
2、docker push 10.0.0.11:5000/目录名(域名下的哪个文件)/centos6-sshd:v3
如果遇到报错:
The push refers to repository [10.0.0.11:5000/centos6.9_ssh]
Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client
解决方法:
#修改配置文件
vim /etc/docker/daemon.json
#加入
{
"insecure-registries": ["10.0.0.11:5000"]
}
#重启docker服务
systemctl restart docker
#重新上传镜像到私有仓库
docker push 10.0.0.11:5000/centos6-sshd:v3
##带basic认证的registry
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd -Bbn oldboy 123456 >> /opt/registry-var/auth/htpasswd

浙公网安备 33010602011771号