贴一篇入门文章:https://blog.csdn.net/deng624796905/article/details/86493330
官方安装文档 : https://docs.docker.com/install/linux/docker-ce/centos/
安装docker-ce(社区版)(安装blog : https://www.cnblogs.com/yufeng218/p/8370670.html )
安装依赖
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装
yum install docker
简约安装
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
开机启动,启动
systemctl enable docker
systemctl start docker
查看信息,版本
docker info
docker version
看到 Docker 客户端的所有命令选项
docker
查看具体命令
docker command –help
容器相关
docker ps / docker ps -a 启动,停 docker start container_name/container_id docker restart container_name/container_id docker stop container_name/container_id
这个时候我们如果想进入到这个容器中,我们可以使用 attach 命令:
docker attach container_name/container_id
那如果我们想运行这个容器中的镜像的话,并且调用镜像里面的 bash ,我们可以使用如下命令:
docker run -t -i container_name/container_id /bin/bash
镜像
运行一个web应用
docker pull training/webapp # 载入镜像
docker run -d -P training/webapp python app.py
Docker 在容器内运行应用程序
docker run ubuntu:15.10 /bin/echo “Hello world”
运行交互式的容器
docker run -i -t ubuntu:15.10 /bin/bash
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
启动容器(后台模式)
docker run -d ubuntu:15.10 /bin/sh -c “while true; do echo hello world; sleep 1; done”
-d:后台模式启动容器
在容器内使用docker logs命令,查看容器内的标准输出
docker logs 2b1b7a428627
docker logs amazing_cori
停止容器
docker stop 2b1b7a428627
docker stop amazing_cori
运行一个web应用
docker pull training/webapp # 载入镜像
docker run -d -P training/webapp python app.py
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
docker ps
多了一列
PORTS
0.0.0.0:32769->5000/tcp
表示: Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
我们也可以通过 -p 参数来设置不一样的端口:
runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py
容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
netstaus -tlnp
tcp6 0 0 :::32768 :::* LISTEN 19689/docker-proxy
docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号
docker port 654519bcb05b
docker port heuristic_williamson
docker logs [ID或者名字] 可以查看容器内部的标准输出。
docker logs -f bf08b7f2cd89
查看WEB应用程序容器的进程
docker top wizardly_chandrasekhar
使用 docker inspect 来查看 Docker 的底层信息
docker inspect wizardly_chandrasekhar
停止 WEB 应用容器
docker stop wizardly_chandrasekhar
重启WEB应用容器
docker start wizardly_chandrasekhar
移除WEB应用容器
我们可以使用 docker rm 命令来删除不需要的容器
runoob@runoob:~$ docker rm wizardly_chandrasekhar
wizardly_chandrasekhar
删除容器时,容器必须是停止状态,否则会报如下错误
==== Docker 镜像使用 ====
使用 docker images 来列出本地主机上的镜像。
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 5 months ago 1.84kB
training/webapp latest 6fae60ef3446 4 years ago 349MB
各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本
要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:
docker run -t -i ubuntu:15.10 /bin/bash
当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。
docker pull ubuntu:13.10
查找镜像
我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/
我们也可以使用 docker search 命令来搜索镜像
docker search httpd
说明:
NAME:镜像仓库源的名称
DESCRIPTION:镜像的描述
OFFICIAL:是否docker官方发布
docker pull httpd
docker run httpd
创建镜像
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1.从已经创建的容器中更新镜像,并且提交这个镜像
2.使用 Dockerfile 指令来创建一个新的镜像
docker run -t -i ubuntu:15.10 /bin/bash
apt-get update
exit
docker commit -m=”has update” -a=”runoob” e218edb10161 runoob/ubuntu:v2
docker images
cat Dockerfile
docker build -t runoob/centos:6.7 .
设置镜像标签
docker tag 860c279d2fec runoob/centos:dev
==== Docker 容器连接 ====
网络端口映射
docker run -d -P training/webapp python app.py (大写-P)
docker run -d -p 5000:5000 training/webapp python app.py (小写-p)
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py (指定容器绑定的网络地址:绑定127.0.0.1)
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py (默认是tcp端口,改绑定udp端口)
容器命名 –name
docker run -d -P –name runoob training/webapp python app.py
Dockerfile 创建镜像
一般来说,我们可以将 Dockerfile 分为四个部分:
基础镜像(父镜像)信息指令 FROM
维护者信息指令 MAINTAINER
镜像操作指令 RUN 、 EVN 、 ADD 和 WORKDIR 等
容器启动指令 CMD 、 ENTRYPOINT 和 USER 等
FROM <image> or FORM <image>:<tag>
MAINTAINER <name>
COPY . /app #拷贝当前目录到容器中的 /app 目录下
WORKDIR /app #WORKDIR 用于配合 RUN,CMD,ENTRYPOINT 命令设置当前工作路径。可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令。默认路径为/
RUN pip install -r requirements.txt # RUN 用于容器内部执行命令、EXPOSE
EXPOSE 5000 #EXPOSE 命令用来指定对外开放的端口。一般格式为 EXPOSE <port> [<port>…]
ENTRYPOINT 可以让你的容器表现得像一个可执行程序一样。一个 Dockerfile 中只能有一个 ENTRYPOINT,如果有多个,则最后一个生效。
CMD
CMD 命令用于启动容器时默认执行的命令,CMD 命令可以包含可执行文件,也可以不包含可执行文件。不包含可执行文件的情况下就要用 ENTRYPOINT 指定一个,然后 CMD 命令的参数就会作为ENTRYPOINT的参数。
CMD 命令有三种格式:
CMD [“executable”,”param1″,”param2″]:推荐使用的 exec 形式。
CMD [“param1″,”param2”]:无可执行程序形式
CMD command param1 param2:shell 形式。
一个 Dockerfile 中只能有一个CMD,如果有多个,则最后一个生效。而 CMD 的 shell 形式默认调用 /bin/sh -c 执行命令。
完整实例
FROM python:2.7 MAINTAINER youname <111111@gmail.com> COPY . /app WORKDIR /app RUN pip install -r requirements.txt EXPOSE 5000 ENTRYPOINT ["python"] CMD ["app.py"]
创建nginx-web的镜像*(亲测)
mkdir -p ~/docker/tt_web cd ~/docker/tt_web touch Dockerfile vim Dockerfile
#下面是Dockerfile的内容
FROM nginx MAINTAINER kiwi <ps_0921@126.com> RUN echo '<h1>Hello, Docker! Kiwi here</h1>' > /usr/share/nginx/html/index.html
在Dockerfile目录执行下面命令(后面有个点)
docker build -t fkiwi/nging_web:v1 .
参数-t说明
-t 是为新镜像设置仓库和名称,其中 fkiwi 为仓库名, nging_web 为镜像名, :v1为标签(不添加为默认 latest )
成功提示
Sending build context to Docker daemon 2.048kB Step 1/3 : FROM nginx ---> 719cd2e3ed04 Step 2/3 : MAINTAINER kiwi <ps_0921@126.com> ---> Running in cd631eb2bf5f Removing intermediate container cd631eb2bf5f ---> 780ebb18ac1b Step 3/3 : RUN echo '<h1>Hello, Docker! Kiwi here</h1>' > /usr/share/nginx/html/index.html ---> Running in 4a292caeb922 Removing intermediate container 4a292caeb922 ---> b9b33fb2c7bf Successfully built b9b33fb2c7bf Successfully tagged fkiwi/nging_web:v1
查看镜像
docker images fkiwi/nging_web v1 b9b33fb2c7bf 10 seconds ago 109MB
用刚才的镜像启动容器(镜像名nging_web 写错了,尴尬)
docker run --name kiwi-nginx-tt -d -p 8084:80 fkiwi/nging_web:v1
浏览器访问 http://192.168.2.108:8084/, 出现 ‘<h1>Hello, Docker! Kiwi here</h1>’ ,成功!
其他命令
exec
在容器 mynginx 中开启一个交互模式的终端:
docker exec -i -t mynginx /bin/bash
对指定的容器执行 bash:
docker exec -it 9df70f9a0714 /bin/bash