Docker

概念:
虚拟机是虚拟出一套硬件,虚拟机的系统进行的磁盘操作,其实都是在对虚拟出来的磁盘进行操作。当运行 CPU 密集型的任务时,是虚拟机把虚拟系统里的 CPU 指令“翻译”成宿主机的CPU指令并进行执行。两个磁盘层,两个处理器调度器,两个操作系统消耗的内存,所有虚拟出的这些都会带来相当多的性能损失,一台虚拟机所消耗的硬件资源和对应的硬件相当,一台主机上跑太多的虚拟机之后就会过载。
Docker 运行应用采取的是“容器”的解决方案:使用 namespace 和 CGroup 进行资源限制,和宿主机共享内核,不虚拟磁盘,所有的容器磁盘操作其实都是对 /var/lib/docker/ 的操作。简言之,Docker 其实只是在宿主机中运行了一个受到限制的应用程序。
==================================================
mac下安装:
docker toolbox:
https://www.docker.com/products/docker-toolbox
使用docker quickstart terminal启动终端 [color=red]不要选择item[/color]

说明:
kitematic:可视化image可安装列表
virtualbox:默认安装了64位linux 运行docker
所有的镜像以及安装都在virtualbox虚拟的linux中
-------------------------------------------------------
ubuntu:
系统安装时 分辨率问题重洗执行一遍硬盘驱动
Devices-install guest additon CD image

sudo apt-get update
sudo apt-get install docker.io

service docker start
service docker stop
service docker restart

[size=large][color=red]使用时先sudo su[/color][/size]
==================================================
国内镜像中心
[size=small][color=red]https://c.163.com/hub#/m/home/[/color][/size]

可以在/etc/docker/目录下
touch daemon.json (没有的话 添加一个)
vi daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

==================================================
命令:
---------------------------------------------------------------------
docker version
--------------------------------------
docker info
--------------------------------------
#本地镜像列表
docker images
--------------------------------------
#删除镜像
docker rmi IMAGE ID
docker rmi -f IMAGE ID
#删除所有镜像
docker rmi $(docker images | grep none | awk '{print $3}' | sort -r)
--------------------------------------
docker history IMAGE ID
--------------------------------------
docker search centos
docker pull ubuntu:14.04
#通过163镜像中心下载镜像
docker pull hub.c.163.com/library/ubuntu:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 302fa07d8117 11 days ago 188 MB
--------------------------------------
#查看所有容器
docker ps -a
#查看运行的容器
docker ps
#查看最近一次启动的容器
docker ps -l
docker ps -q
--------------------------------------
#创建容器名称为hihihi <镜像 ID>:b47daa16e381
docker create --name hihihi b47daa16e381
--------------------------------------
docker run -dit 302fa07d8117 /bin/bash
docker run <相关参数> <镜像 ID> <初始命令>
/bin/bash:初始命令 表示容器启动时立即在容器内打开一个shell终端
<命令>&&<命令> 执行多条命令
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
-d:后台以守护状态运行
-p:-p 8081:8080 宿主8081对应容器8080
-e:指定env
-h:host
--name:指定容器的名字
--rm:容器运行完毕会自动删除 --rm=true

所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下
docker run -i -t -d -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash

可以启动 [color=red]IMAGE ID : 302fa07d8117[/color]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
25ad28c234fc 302fa07d8117 "/bin/bash" 14 seconds ago Exited (0) 4 seconds ago loving_aryabhata
--------------------------------------
#进入容器进行操作 [color=red]CONTAINER ID : 25ad28c234fc[/color]
docker attach 25ad28c234fc
--------------------------------------
docker start 25ad28c234fc
ctrl+d 关闭容器并退出
ctrl+q+p 退出
--------------------------------------
docker restart 25ad28c234fc
--------------------------------------
docker stop 25ad28c234fc
--------------------------------------
#快速地强制关闭容器
docker kill 25ad28c234fc
--------------------------------------
docker rm 25ad28c234fc
#删除所有容器
docker rm $(docker ps -a -q)
--------------------------------------
docker logs 25ad28c234fc
#查看容器root用户 用户名密码
docker logs 25ad28c234fc 2>&1 | grep '^User: ' | tail -n1
#实时查看容器日志
docker logs -f <容器名orID>
--------------------------------------
docker inspect <容器名orID>
#查看Volumes项
docker inspect -f '{{.Volumes}}' 5c43ba5e5cae
--------------------------------------
#备份
docker export 5c43ba5e5cae >ubuntu_container.tar
docker save 5c43ba5e5cae >ubuntu_container.tar
--------------------------------------
cat ubuntu_container.tar |docker import - ubuntu:container
docker load <ubuntu_container.tar
--------------------------------------
docker build
目录(/home/samson/testimage/)下有Dockerfile文件

Dcokerfile内容:
# Version 0.2
# 基础镜像
FROM ubuntu:latest
# 维护者信息
MAINTAINER shiyanlou@shiyanlou.com
# 镜像操作命令
RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean
RUN apt-get install -yqq supervisor
RUN mkdir -p /var/log/supervisor
VOLUME ["/var/log/apche2"]
ADD html.tar /var/www
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
WORKDIR /var/www/html
ENV HOSTNAME shiyanloutest
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apche2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apche2
EXPOSE 80
# 容器启动命令
CMD ["/usr/bin/supervisord"]

-t参数指定镜像名称
docker build -t testimage:0.2 /home/samson/testimage/
--------------------------------------
#显示容器中运行的进程信息
docker top 5c43ba5e5cae
--------------------------------------
#复制宿主文件asdfasdfas到容器5c43ba5e5cae的root目录下
docker cp asdfasdfas 5c43ba5e5cae:/root
docker cp 5c43ba5e5cae:/root/asdfasdfas /home
#复制宿主文件夹m内容到容器5c43ba5e5cae的root目录下
docker cp /m 5c43ba5e5cae:/root
--------------------------------------
#查看容器文件结构更改
docker diff 5c43ba5e5cae
--------------------------------------
#在容器5c43ba5e5cae中执行ls /home命令 可以执行容器中的一个shell脚本
docker exec -t -i -d 5c43ba5e5cae ls /home
--------------------------------------
#需要名称
docker rename 5c43ba5e5cae testrename
--------------------------------------
#从容器创建一个新的镜像
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
docker images mymysql:v1
REPOSITORY TAG IMAGE ID CREATED SIZE
mymysql v1 37af1236adef 15 seconds ago 329 MB
[size=medium][color=red]修改容器后 执行commit后成为新的image 然后停止&删除旧的容器 启动新的image[/color][/size]
--------------------------------------
#docker升级
sudo apt-get install apt-transport-https
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
apt-get install -y lxc-docker
ln -sf /usr/bin/docker /usr/local/bin/docker
docker version

--------------------------------------
#nsenter
docker inspect -f {{.State.Pid}} 容器id
5270
nsenter --target 5270 --mount --uts --ipc --net --pid

---------------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值