Docker学习日记

spylyt 2020-06-14

简介:
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/

**

[ ~]# 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": 在启动的容器里执行的命令

运行交互式容器:

[ ~]# docker run -it ubuntu:15.10 /bin/bash
:/# cat /etc/issue
Ubuntu 15.10 \n \l

参数解析:

-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。

可以使用 exit 或是 CTRL+D退出容器

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

导出和导入容器

导出容器
[ ~]# 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 ""

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 ""
 ---> 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
效果如下;
[ /]# docker exec -it e8cdc773df3e /bin/bash
[ /]# **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
[ /]# 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

相关推荐