docker官网:https://docs.docker.com/engine/install/centos/
官网内有详细安装步骤,以下安装环境为centos7
1.卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.安装yum-utils
软件包(提供yum-config-manager
实用程序)并设置稳定的存储库。
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
3.安装DOCKER引擎
$ sudo yum install docker-ce docker-ce-cli containerd.io
4.启动Docker
$ sudo systemctl start docker
5.验证docker,如果下载hello world镜像失败,可参考:https://www.cnblogs.com/nthforsth/p/12257755.html
$ sudo docker run hello-world
可参考网址:https://github.com/docker-library
FROM
引用一个基础镜像,安全起见,尽量使用官方的image作为基础镜像
FROM centos
LABEL
定义image的基础信息,有点类似代码中的注释
RUN
运行命令的关键字,每一个RUN一句就是一层,建议使用 \ 连接语句,避免无用分层。
执行命令并创建新的 Images Layer
RUN yum update && yum install -y vim \
python-dev
WORKDIR
WORKDIR /root
设定当前目录为工作目录,如果该目录会自动创建
ADD and COPY
添加本地文件到image,COPY优于ADD,ADD除了COPY之外还有解压的功能
ADD hello / #把hello添加到image下
ENV
设置常量,可以增加Dockerfile的可维护性
ENV mysql 5.6
CMD
1.设置容器启动后默认执行的命令和参数
2.如果docker run指定了其他命令,CMD命令会被忽略
3.如果定义了多个CMD,最后一个会被执行
ENTRYPOINT
1.设置容器启动后默认执行的命令
2.让容器以应用程序或者服务的形式运行
3.一定会被执行,不会被忽略
docker --help 查看所有的命令
以下为常用命令:
docker run 镜像ID 生成一个容器
docker exec -it 容器ID bash 进入一个容器
docker stop 容器ID 停止容器
docker restart 容器ID 重启容器
docker logs 容器ID 查看容器日志
docker stats 容器ID 查看容器的cpu以及其他状态
docker inspect 容器ID 查看容器详细信息
docker run --help 查看所有的限制
[root@promote ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
d3ceaeeae4f2 bridge bridge local
093d57f23353 host host local
4c8ebd61dd4a none null local
详细信息参见:https://blog.csdn.net/HCY_2315/article/details/103927400
docker容器之间的通信:
使用命令即可查看:
[root@promote ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02429601b796 no veth1498116
veth41f2d5e
brctl安装:
[root@promote ~]# yum install bridge-utils
启动容器时,使用 --link ,可以在容器的 /etc/hosts 下面自动增加配置
如,执行命令:
docker run -d --name test3 --link test1 centos /bin/sh -c "while true; do sleep 3600; done"
进入test3容器,可以直接 ping test1
sh-4.4# ping test1
PING test1 (172.17.0.2) 56(84) bytes of data.
64 bytes from test1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.457 ms
64 bytes from test1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.075 ms
^C
--- test1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.075/0.266/0.457/0.191 ms
查看 /etc/hosts 文件
不过在test1则不能直接 ping test3
把docke人的端口映射到外面以供访问
-p [容器端口] : [宿主机端口]
例子:docker run --name web -d -p 5000:5000 imagesID