Docker简单操作(二)

1、docker容器简单操作
docker search 镜像名     #搜索镜像、如docker search nginx
docker pull alpine      #拉取镜像、alpine是比较小的镜像
docker push 镜像        #上传镜像
docker images         #查看本机存在的镜像
docker save nginx >/tmp/nginx.tar.gz #镜像导出
docker load nginx </tmp/nginx.tar.gz #镜像导入
docker run alpine sh #启动镜像alpine
docker run -it alpine sh #加上-it、有可运行的终端 ctrl不放手按p跟q键盘退出、如果直接退出容器也就退出了
docker ps #显示运行的容器
docker ps -a #显示所有容器、不管运行还是没有运行的
docker rm -f a85e6f7b48ba #删除正在运行的容器加-f、对应容器ID
docker system df #查看镜像、容器、数据卷所占用的空间。
docker run -it --name mynginx nginx #启动nginx容器、--name是命名
docker inspect mynginx        #查看容器的详细信息、IP、网关等
docker exec -it mynginx sh #-i 让docker的标准输入打开{input},-t 让docker分配一个伪终端
#查看容器运行产生的信息
docker logs
docker logs ‐f
#容器的启动、停止stop 以及kill
docker start 容器名称或者ID
docker stop 容器名称或者ID
docker kill 容器名称或者ID
#如何杀死所有正在运行的容器
docker kill $(docker ps ‐a ‐q)
#删除镜像
[root@linux-node1 ~]# docker rmi 镜像ID #指定镜像ID
#镜像id如果指向了两个repository,用上面命令是无法删除的
例如:
[root@linux-node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
w787815/my_nginx v1 99805914d177 35 hours ago 109 MB
docker.io/w787815/my_nginx latest 99805914d177 35 hours ago 109 MB #提示
[root@linux-node1 ~]# docker rmi 99805914d177
Error response from daemon: conflict: unable to delete 99805914d177 (must be forced) - image is referenced in multiple repositories [root@linux-node1 ~]# docker rmi w787815/my_nginx:v1 #指定名称去删除 2.docker网络访问
#2.1 容器端口映射
在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过­P或 者­p参数来指定容器端口映射。当使用­P(大写)时,docker会随机映射一个端口到容器内部开放的端口
[root@linux-node1 ~]# docker run --name mynginx -d -p 80:80 w787815/mynginx nginx #--name指定容器名称、-d后台运行
ffebe563ea32c21272f036a45a9d125970f2b131ce0ca560828337f1ee331622
[root@linux-node1 ~]#
[root@linux-node1 ~]#
[root@linux-node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ffebe563ea32 w787815/mynginx "nginx" 7 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp mynginx
0be494e9e192 centos "bash" 37 hours ago Up 37 hours serene_davinci docker run –rm ­it ­P nginx #端口随机映射
docker run –rm ­it ­p 80:80 nginx #映射所有地址,当然­p 也可以绑定多个端口
docker run ­it –rm ­p 80:80 ­p 8080:80 nginx
docker run –rm ­it ­p 127.0.0.1:80:80 nginx #指定地址的指定端口
docker run –rm ­it ­p 127.0.0.1:80:80/udp nginx #默认是tcp映射但是也可以指定UDP
docker run –rm ­it ­p 127.0.0.1::80 nginx #此时默认会绑定宿主机上所有ip的80端口 2.2容器互联
容器间互联是让多个容器中应用进行交互的一种方式。
如果你之前有 Docker 使用经验,你可能已经习惯了使用 --link 参数来使容器互联。
随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 --link 参数。
容器间互联是通过name来进行指定,因此起一个容易记忆的容器名是多么的重要 2.2.1使用 --link 参数来使容器互联。
[root@linux-node1 ~]# docker run --name web1 -d -p 80:80 w787815/mynginx nginx
71004dc88f03a237e7700badaad45852a04d993140a76a689072fd528532f007 [root@linux-node1 ~]# docker run --name web2 --link web1 -d -p 8080:80 w787815/mynginx nginx [root@linux-node1 ~]# docker exec -it web2 sh
sh-4.2# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.6 web1 71004dc88f03
172.17.0.7 267847dcf484 2.2.2新建网络
下面先创建一个新的 Docker 网络。
[root@linux-node1 ~]# docker network create -d bridge my-net #-d 参数指定 Docker 网络类型,有 bridge overlay。其中 overlay 网络类型用于 Swarm mode, 连接容器
运行一个容器并连接到新建的 my-net 网络
[root@linux-node1 ~]# docker run --name nginx1 --network my-net -d -p 8088:80 w787815/mynginx nginx 打开新的终端,再运行一个容器并加入到 my-net 网络
[root@linux-node1 ~]# docker run --name nginx2 --network my-net -d -p 8188:80 w787815/mynginx nginx 再打开一个新的终端查看容器信息
[root@linux-node1 ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae4de271badb w787815/mynginx "nginx" 18 seconds ago Up 18 seconds 0.0.0.0:8188->80/tcp nginx2
370f4481322c w787815/mynginx "nginx" 47 seconds ago Up 46 seconds 0.0.0.0:8088->80/tcp nginx1 #查看IP 并用ping来测试
[root@linux-node1 ~]# docker exec -it nginx2 sh
sh-4.2# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3 ae4de271badb
sh-4.2# exit
exit
[root@linux-node1 ~]# docker exec -it nginx1 sh
sh-4.2# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 370f4481322c
sh-4.2# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.056 ms 如果你有多个容器之间需要互相连接,推荐使用 Docker Compose。 3、配置DNS dns服务
默认docker是采用宿主机的dns 可以采用‐‐dns=xxxx的方式制定
vim /usr/lib/systemd/system/docker.service
也可以在 /etc/docker/daemon.json 文件中增加以下内容来设置。 {
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
} 这样每次启动的容器 DNS 自动配置为 114.114.114.114 和 8.8.8.8。使用以下命令来证明其已经生效。
[root@linux-node1 ~]# sudo systemctl daemon-reload
[root@linux-node1 ~]# sudo systemctl restart docker #修改配置文件需重启
[root@linux-node1 ~]# docker run -it --rm centos cat etc/resolv.conf
search example.com
nameserver 114.114.114.114
nameserver 8.8.8.8 如果用户想要手动指定容器的配置,可以在使用 docker run 命令启动容器时加入如下参数: -h HOSTNAME 或者 --hostname=HOSTNAME 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。但它在容器外部看不到,既不会在 docker container ls 中显示,也不会在其他的容器的 /etc/hosts 看到。 --dns=IP_ADDRESS 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。 --dns-search=DOMAIN 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。 注意:如果在容器启动时没有指定最后两个参数,Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。
上一篇:Docker之数据卷(Data Volumes)操作


下一篇:GitHub学习心得之 简单操作