Docker学习日记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker学习日记相关的知识,希望对你有一定的参考价值。
简介:
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
常用命令
**
# docker ps // 查看目前启动的容器
# docker ps -a // 查看所有的容器
# docker start 5917eac21c36 // 启动容器ID为5917eac21c36的容器
# docker stop 5917eac21c36 // 关闭容器ID为:5917eac21c36 的容器
# docker restart 5917eac21c36 // 重启容器ID为:5917eac21c36 的容器
# docker logs 2b1b7a428627 //查看容器ID为:。。。的容器日志
# docker pull ubuntu // 获取镜像
# docker run -it ubuntu /bin/bash // 以命令行模式进入镜像未Ubuntu的容器
# docker run -itd ubuntu /bin/bash // -d 是默认不进入容器在后台运行
# docker rmi -f // 删除镜像ID为b93646ae03d0的镜像
# docker rm -f // 删除容器ID为43810b8e35d1的容器
# docker run -it -p 808:80 centos/dvwa:v3 /bin/bash //将内部80端口影响到本机808端口上 ,如果需要映射多个端口可以继续添加-p 参数 eg: -p 223:22 -p 63306:3306
# docker run -d -P centos/dvwa:v3 /bin/bash // 将内部端口随机映射到物理机上
# docker top 67094b1dec19 // 查看容器进程
# docker search httpd //查找镜像 也可以去docker官网搜索,Docker Hub 网址为: https://hub.docker.com/
**
[root@1inux ~]# docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
各个参数解析:
docker: Docker 的二进制执行文件。
run: 与前面的 docker 组合来运行一个容器。
ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo "Hello world": 在启动的容器里执行的命令
运行交互式容器:
[root@1inux ~]# docker run -it ubuntu:15.10 /bin/bash
root@9d9162035d58:/# cat /etc/issue
Ubuntu 15.10
l
参数解析:
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
可以使用 exit 或是 CTRL+D退出容器
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
导出和导入容器
导出容器
[root@1inux ~]# docker export 67094b1dec19 >centos.dvwa.tar //导出容器ID:67094b1dec19到本地
导入容器:
# cat centos.dvwa.tar | docker import - centos/dvwa:v1 // 注意 import后有“-”
sha256:6dc11a8857af3eabf0f42a270bda3bd98849ab237f1d3277562e079b2fbdca8f
创建镜像
1、从已创建的镜像中,更新镜像,并提交这个镜像
2、使用Dockerfile指令来创建一个新的镜像
更新副本:
# docker commit -m="has dvwa" -a="glodon_1inux" 67094b1dec19 centos/dvwa:v1
-m: 提交的描述信息
-a: 指定镜像作者
67094b1dec19:容器 ID
centos/dvwa:v1: 指定要创建的目标镜像名
# 通过以下命令启动
# docker run -it -p 80:80 centos/dvwa:v1
构建新的镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
编写Dockerfile
# cat Dockerfile
FROM 1inux/centos:6.6
MAINTAINER Fisher "MQ@1inux"
COPY ./rasp-*/rasp /rasp // .rasp-* 和Dockerfile在一个目录下
RUN echo "cloud.enable: true" >> /rasp/conf/openrasp.yml && echo "cloud.backend_url: https://grasp-test.glodon.com/" >> /rasp/conf/openrasp.yml && echo "cloud.app_id: d3f92106daa329948879e683ee1d6d39641723ca" >> /rasp/conf/openrasp.yml && echo "cloud.app_secret: MRLTPAdlR2gG2iJrv6O1pEZrgrauVoxlOKH8nOWnuDa" >> /rasp/conf/openrasp.yml
编写完成后,通过 docker build 命令来构建一个镜像
#** docker build -t 1inux/centos-rasp:6.6 .**
Sending build context to Docker daemon 42.06MB
Step 1/4 : FROM 1inux/centos:6.6
---> b93646ae03d0
Step 2/4 : MAINTAINER Fisher "MQ@1inux"
---> Running in f34a84c360ce
Removing intermediate container f34a84c360ce
---> d6104f825a18
Step 3/4 : COPY ./rasp-*/rasp /rasp
---> 70c531b49efe
Step 4/4 : RUN echo "cloud.enable: true" >> /rasp/conf/openrasp.yml && echo "cloud.backend_url: https://grasp-test.glodon.com/" >> /rasp/conf/openrasp.yml && echo "cloud.app_id: d3f92106daa329948879e683ee1d6d39641723ca" >> /rasp/conf/openrasp.yml && echo "cloud.app_secret: MRLTPAdlR2gG2iJrv6O1pEZrgrauVoxlOKH8nOWnuDa" >> /rasp/conf/openrasp.yml
---> Running in 98952e495c27
Removing intermediate container 98952e495c27
---> 3f4001f43793
Successfully built 3f4001f43793
Successfully tagged 1inux/centos-rasp:6.6
参数说明:
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
容器互联:
新建网络:
# docker network create -d bridge 1inux-test // -d 指定Docker网络类型 ,有 bridge、overlay。
# docker network ls //查看网络
启动两个同一网络的容器
# docker run -idt --name test1 --network 1inux-test 1inux/centos-rasp:6.6 /bin/bash
# docker run -idt --name test2 --network 1inux-test 1inux/centos-rasp:6.6 /bin/bash
效果如下;
[root@localhost /]# docker exec -it e8cdc773df3e /bin/bash
[root@e8cdc773df3e /]# **ping test1**
PING test1 (172.20.0.2) 56(84) bytes of data.
64 bytes from test1.1inux-test (172.20.0.2): icmp_seq=1 ttl=64 time=0.414 ms
--- test1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 968ms
rtt min/avg/max/mdev = 0.414/0.414/0.414/0.000 ms
[root@e8cdc773df3e /]# ping test2
PING test2 (172.20.0.3) 56(84) bytes of data.
64 bytes from e8cdc773df3e (172.20.0.3): icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from e8cdc773df3e (172.20.0.3): icmp_seq=2 ttl=64 time=0.100 ms
推送镜像
用户登录后,可以通过 docker push 命令将自己的镜像推送到 Docker Hub。
以下命令中的 username 请替换为你的 Docker 账号用户名。
$ docker tag ubuntu:18.04 username/ubuntu:18.04
$ docker image ls
以上是关于Docker学习日记的主要内容,如果未能解决你的问题,请参考以下文章