(旧版本)docker 安装及docker平台基本使用命令
单机工作流程:
服务器 A 上运行 docker Engine 服务,在 docker Engine 上启动很多容器 container ,
从外网 Docker Hub 上把 image 操作系统镜像下载来,放到 container 容器运行。这样一个容器的实例就运行起来了。
最后,通过 Docker client 对 docker 容器虚拟化平台进行控制。
https://hub.docker.com/
1、docker安装
方法一、使用离线安装(RPM包安装)
tar zxvf docker-rpm.tar.gz
vim /etc/yum.repos.d/docker-rpm.repo
[docker-rpm]
name=docker-rpm
baseurl=file:///root/docker-rpm
enable=1
gpgcheck=0
mv CentOS-* /opt/ #移出 centos 自带的 yum 源
yum -y install docker
方法二、在线安装(旧版本安装)
yum -y install docker
#启动 docker 服务
systemctl start docker
#设置开机启动 docker 服务
systemctl enable docker
#显示 Docker 版本信息
docker version
docker info
2、下载docker镜像
搜索 images: #默认从 Docker Hub 中搜索符合条件的镜像。
docker search centos
#默认从 Docker Hub 中搜索符合条件的镜像。
方法 一:从公网 docker hub 拉取(下载)image
docker pull docker.io/centos
扩展:更换默认镜像地址
vim /etc/docker/daemon.json
改: {}
为:
{
"registry-mirrors": ["https://e9yneuy4.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
方法二、导入本地的镜像归档
docker load -i /root/docker.io-centos.tar
参数:-i " docker.io-centos.tar " 指定载入的镜像归档。
方法三:直接下载其他站点的镜像
[root@xuegod63 ~]# docker pull hub.c.163.com/library/tomcat:latest
#查看 images 列表
docker images
问题解决: 开启动网络转发功能
#插入以下内容
echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
sysctl -p #生效
查看是否生效:
cat /proc/sys/net/ipv4/ip_forward
3、 docker 平台基本使用方法
run 运行
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
#列出所有本地镜像
docker images
#启动交互实例
docker run -it docker.io/centos:latest /bin/bash
#启动后台运行实例
-d 后台运行容器,并返回容器 ID;
-c 后面跟待完成的命令
docker run -d docker.io/centos:latest /bin/sh -c "while true;do echo hello world; sleep 1; done"
输入回车后会返回docker容器的完整ID
4、容器日志读取
#列出所有运行中容器
docker ps
#列出所有容器(包含沉睡/退出状态的容器)
docker ps -a
语法:docker logs 容器实例的Name/ID
docker logs 1b3493487c4 #容器的 ID 可以写全,也可以丌写全,只要唯一就可以了
5、杀死一个容器
#列出所有容器(包含沉睡/退出状态的容器)
docker ps -a
#杀死一个容器
docker kill c4a213627f1b
6、启动、停止、重启、删除 container 容器实例
启动容器实例:docker start 1a63ddea6571
停止容器实例:docker stop 1a63ddea6571
重启容器实例:docker restart 1a63ddea6571
删除容器实例:docker rm e085da6919af
强制删除容器实例:docker rm -f 1a63ddea6571
7、 docker 镜像制作方法
Docker Image 的制作两种方法
方法 1:docker commit #保存 container 的当前状态到 image 后,然后生成对应的 image
方法 2:docker build #使用 Dockerfile 文件自动化制作 image
方法一:docker commit
语法: docker commit <container ID> <image_name>
docker run -it docker.io/centos:latest /bin/bash
yum -y install httpd
exit
docker commit bbd01c4b8567 docker.io/centos:apache
方法二:通过:docker build 创建一个基于 centos 的 httpd web 服务器镜像。
使用 docker build 创建镜像时,需要使用 Dockerfile 文件自动化制作 image 镜像
注:Dockerfile 有点像源码编译时./configure 后产生的 Makefile
1、创建工作目录
mkdir /docker-build
cd /docker-build
touch Dockerfile
注: make 自动化编译时需要 Makefile 文件,自动化创建 docker 镜像时,需要 Dockerfile
2、编辑Dockerfile
Dockerfile 用来创建一个自定义的 image,包含了用户指定的软件依赖等。
#vim Dockerfile
FROM docker.io/centos:latest
MAINTAINER <[email protected]>
RUN yum -y install httpd
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html
注释:
FROM docker.io/centos:latest # FROM 基于哪个镜像
MAINTAINER <[email protected]> # MAINTAINER 镜像创建者
RUN yum -y install httpd #RUN 安装软件用
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html
# ADD 将文件<src>拷贝到新产生的镜像的文件系统对应的路径<dest>。所有拷贝到新镜像中的文件和文件夹权限为 0755,uid 和 gid 为 0
CMD echo hello world #container 启劢时执行的命令戒启劢服务,但是一个 Dockerfile 中只能有一条 CMD 命令,多条则只执行最后一条CMD.
例如:dockefile1 中的内容如下:
# vim dockefile1
FROM ubuntu
MAINTAINER xxx
RUN echo hello1 > test1.txt
RUN echo hello2 > /test2.txt
EXPOSE 80
EXPOSE 81
CMD ["/bin/bash"]
3、创建start.sh脚本启动 httpd 服务和apache默认首页index.html文件
echo "/usr/sbin/httpd -DFOREGROUND" > start.sh
#注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd
chmod a+x start.sh
echo "docker image build test" > index.html
4、使用命令 build 来创建新的 image
语法:docker build -t 父镜像名:镜像的 tag Dockerfile文件所在路径
-t :表示 tage,镜像名
例:使用命令 docker build 来创建新的 image,并命名为 docker.io/centos:httpd
docker build -t docker.io/centos:httpd ./
注: ./ 表示当前目彔。另外你的当前目彔下要包含 Dockerfile
8、Docker Image 的发布
方法 1:Save Image To TarBall 保存 Image 到 tar 包
语法:docker save -o 导出的镜像名.tar 本地镜像名:镜像标签
docker save -o docker.io-centos-httpd-docker-image.tar docker.io/centos:httpd
使用导入本地镜像:
docker rmi docker.io/centos:httpd #删除已有镜像,这里写自己镜像的 ID或名字
docker load -i centos-httpd-docker-image.tar #导入本地的镜像
方法 2:Push Image To Docker Hub 发布到外网
1、Signup on docker hub & create repo 注册一个帐号 https://hub.docker.com/
2、Login to docker hub
# docker login -u userabc -p abc123 -e [email protected]
3、Push image to docker hub #上传镜像
# docker push centos:httpd
4、Pull image from docker hub #下载镜像
# docker pull userabc/centos:httpd # 用户名/镜像名
方法 3: 使用阿里云的私有仓库来发布,等下节讲完私有仓库的搭建,再讲
9、 Container 容器端口映射与文件夹映射(默认采用Bridge模式,即类似NAT网络连接)
docker run -d -p 80:80 docker.io/centos:httpd /bin/bash -c /usr/local/bin/start.sh
映射了/var/www/html/index.html的新写法:
docker run -d -p 80:80 -v /var/www/html:/var/www/html longtao/centos:httpd /bin/bash -c /usr/local/bin/start.sh
注: -p 物理机的 80 端口:容器实例的 80 端口 ,把容器中的 80 端口映射到物理机上的 80 端口
-v 物理机的文件夹:容器实例的文件夹 ,把容器实例中的的文件夹映射到物理机上的文件夹
#在物理机上查看容易状态: docker ps
查看物理机上开启的 80 代理端口
netstat -antup | grep 80
tcp6 0 0 :::80 :::* LISTEN 18658/docker-proxy-
10、访问正在运行的 container 容器实例
语法: docker exec -it <container id | name> /bin/bash
查看正在运行的容器 ID:docker ps
docker exec -it 87fadc0249a9 /bin/bash #进入容器