Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
实验环境
centos7.3_x64
实验软件
docker-1.13.1-162.git64e9980.el7.centos.x86_64
软件安装
cp -pv /etc/hosts /etc/hosts.bak
echo 192.168.10.14 docker > /etc/hosts
hostnamectl set-hostname docker
uname -sr 查看内核版本
Linux 3.10.0-514.el7.x86_64
yum install -y axel vim lsof ntp curl psmisc bind-utils iftop
yum install -y yum-utils device-mapper-persistent-data lvm2 bridge-utils device-mapper docker-ce
systemctl stop firewalld.service && systemctl disable firewalld.service
systemctl stop NetworkManager && systemctl disable NetworkManager
echo SELINUX=disabled > /etc/sysconfig/selinux
systemctl daemon-reload && systemctl start docker && systemctl enable docker
docker --version
Docker version 19.03.12, build 48a66213fe
cat /etc/docker/daemon.json 配置docker镜像加速
{
"registry-mirrors": ["https://m1sc70wl.mirror.aliyuncs.com"]
}
镜像管理
docker search -s300 tomcat 搜索镜像
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/tomcat Apache Tomcat is an open source implementa... 2775 [OK]
docker pull tomcat 下载镜像
docker images 查看可用镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 6055d4d564e1 5 days ago 647MB
centos latest 831691599b88 3 weeks ago 215MB
mysql latest be0dbf01a0f3 4 weeks ago 541MB
docker rmi -f docker.io/centos 删除单个镜像 -f为强制
docker rmi -f $(docker images -qa) 删除多个镜像
docker save -o /root/mysql.tar.gz mysql 保存镜像
docker load < /root/mysql.tar.gz 导入镜像
容器管理
docker run -it centos /bin/bash 启动容器 容器名字 id均可
docker run -it --name centos11 centos 启动容器 从命名
docker run -itd -p 888:80 nginx 启动镜像映射端口 -p制定端口 -P为随机端口 -d后台启动
docker ps | grep nginx
52642942cf7e nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:888->80/tcp suspicious_lamport
docker exec -t 52642942cf7e curl http://localhost/index.html | grep Welcome
<title>Welcome to nginx!</title>
exit/ctl+q+p exit停止退出 ctrl+q+p 不停止退出
docker inspect mysql 查看容器结构
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e95d4df37d2f centos "/bin/bash" 17 seconds ago Up 16
docker start/restart/stop e95d4df37d2f 启动/重启/停止容器 容器id
docker attach e95d4df37d2f 未停止容器 从新进入
docker exec -t f3d96985d10b uname -a 容器外执行命令
Linux f3d96985d10b 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
docker cp f3d96985d10b:/tmp/ks-script-585nin8f /root 复制容器文件到宿主机
docker kill e95d4df37d2f 强制关闭容器
docker rm e95d4df37d2f 删除容器
自定义dockerfile
mkdir -pv /var/docker
mkdir -pv /var/docker/redis
touch /var/docker/redis/Dockerfile
cat /var/docker/redis/Dockerfile
FROM centos:7.5.1804
MAINTAINER 115946156@qq.com
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN yum -y install epel-release && yum -y install redis && yum install -y net-tools
EXPOSE 6379
RUN yum clean all
RUN sed -i.bak -e 's@bind 127.0.0.1@bind 0.0.0.0@g' /etc/redis.conf
RUN echo "requirepass 123456" >> /etc/redis.conf
ENTRYPOINT [ "/usr/bin/redis-server","/etc/redis.conf"]
CMD []
docker build -t redis . 构建镜像
docker run -itd -p 6333:6379 redis 运行镜像
docker save -o /root/redis.tar.gz redis 备份镜像到宿主机
docker images | grep redis
redis latest 18f4ae439e80 About a minute ago 486MB
docker ps | grep redis
8bb366f62504 redis "/usr/bin/redis-serv…" About a minute ago Up About a minute 0.0.0.0:6333->6379/tcp zen_thompson
配置容器卷
docker images | grep centos
centos latest 831691599b88 3 weeks ago 215MB
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c9434259ed0 centos:latest "/bin/bash" 3 minutes ago Up 3 minutes
mkdir -pv /web/test && touch /web/test/aa.html docker宿主机操作
docker run -it -v /web/test/:/var/www/html centos -v 宿主机目录:容器目录 镜像名
touch /web/test/dd.html dockr宿主机操作
docker exec -t 4c9434259ed0 ls -l /var/www/html | grep dd.html
-rw-r--r-- 1 root root 0 Jul 12 15:53 dd.html
docker network ls
NETWORK ID NAME DRIVER SCOPE
78eeb0ba5619 bridge bridge local
a948abc2cc21 host host local
bd0605474e74 none null local
ip addr | grep docker0
docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
ps -ef | grep docker
root 13889 1 1 20:53 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock