一、安装一个Docker
1、配置一个Docker的yum源
┌─[ localhost] ─[ ~]
└──╼ cat /etc/yum.repos.d/docker.repo
[ docekr]
name = docker-centos7.7
baseurl = https://mirrors.aliyun.com/docker-ce/linux/centos/7.7/x86_64/stable/
enabled = 1
gpgcheck = 0
2、安装Docker-ce(社区免费版)
yum install -y docker-ce
┌─[ localhost] ─[ ~]
└──╼ cat /etc/docker/daemon.json
{
"registry-mirrors" : [ "https://mch6oeq2.mirror.aliyuncs.com" ]
}
┌─[ localhost] ─[ ~]
└──╼ systemctl enable --now docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
┌─[ localhost] ─[ ~]
└──╼ systemctl status docker
┌─[ localhost] ─[ ~]
└──╼ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
二、Docker中的一些基础操作
1、运行第一个容器
┌─[ localhost] ─[ ~]
└──╼ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 2 years ago 13 .3kB
┌─[ docker-node1] ─[ ~]
└──╼ docker pull nginx:1.24
┌──[ docker-node1] ─[ ~]
└──╼ docker run -tid -p 8080 :80 nginx:1.24
6c31e61a8908a197cd82a9a134d2be9918fcde0636d7d4f44b0eeb4e02c7d571
t:在新创建的容器中运行一个伪终端(pseudo-TTY)。
i:以交互模式运行容器,通常与-t选项一起使用。
d:以后台模式运行容器,并返回容器ID。
-p: 物理机端口:容器内业务端口 将Nginx服务发布到物理机的端口上
┌─[ docker-node1] ─[ ~]
└──╼ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c31e61a8908 nginx:1.24 "/bin/sh -c '/usr/lo…" 2 minutes ago Up 2 minutes 0.0 .0.0:8080-> 80 /tcp, :::8080-> 80 /tcp relaxed_mcclintock
ps : 将运行状态的容器显示出来
ps -a :将所有的容器显示出来,包括已经退出或者暂停的容器
┌─[ docker-node1] ─[ ~]
└──╼ curl 192.168 .7.16:8080
< ! DOCTYPE html>
< html>
< head>
< title> Welcome to nginx! < /title>
< style>
┌─[ docker-node1] ─[ ~]
└──╼ docker exec -ti 6c bash
[ root@6c31e61a8908 /]
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
exec :表示在容器中执行一个命令
-ti :交互式操作
bash :新开一个终端仓库进行操作。
2、docker的一些基础操作以及命令
┌─[ docker-node1] ─[ ~]
└──╼ docker inspect 容器名称/容器ID
┌─[ docker-node1] ─[ ~]
└──╼ docker rm -f 容器名称/容器ID
-f : 强制删除
┌─[ docker-node1] ─[ ~]
└──╼ docker rmi 镜像名称:版本号/镜像的ID
Deleted: sha256:9db08c5108aa3f93920884cee3b6074f6b6265cb9e7100682892b0ac3bbbded4
┌─[ docker-node1] ─[ ~]
└──╼ docker commit relaxed_mcclintock nginx_test:1.24
sha256:5c0aad3fc637023e1c93d324f4329a254b6d91c04f0b9e8b22c6f1f45e15f227
┌─[ docker-node1] ─[ ~]
└──╼ docker import tar包名称
┌─[ docker-node1] ─[ ~]
└──╼ docker export relaxed_mcclintock > nginx_test.tar
┌─[ docker-node1] ─[ ~]
└──╼ docker stop 6c
┌─[ docker-node1] ─[ ~]
└──╼ docker --version
┌─[ docker-node1] ─[ ~]
└──╼ docker logs 容器名称/容器ID
3、Docker中创建容器时的一些参数设置
--name: 容器的名称
--hostname:容器内部主机名称
-v 本地目录路径: 容器内部目录路径 :对容器内部的某个数据目录做数据持久化存储。(也可以用来做配置文件的修改)
-p 本地端口:容器内部端口 : 将容器内部的服务端口发布到本地物理机的端口上,做一个端口映射
-P 容器端口: 对容器内部的服务端口做一个随机端口的映射
-e 变量名称= 变量值: 在创建容器的时候为容器内部的变量指定值
--cpus cpu数量 : 做资源限制只能使用一个cpu
--memory 1G : 做资源限制只能使用1G内存
--link 容器主机:别名 --> 如果容器创建的时候使用的是默认的网络模式,那么容器之间通信只能使用别名进行通信
--net = 网络模式: 指定容器的网络模式
--restart = 重启策略
1 、no:默认策略,容器退出后不自动重启
2 、always: 无论容器是以什么状态退出,Docker都会重启它
3 、unless-stopped: 除非是用户手动停止容器,否则在容器退出时总是重启
4 、on-failure: 只有当容器非正常退出时,Docker才会重启容器
三、Docker的网络
1、Docker的网络工作模式介绍
1 、bridge网络模式:相当于我们vmware的NAT模式:
SNAT:容器可以借助SNAT来访问外部的网络,物理机开启路由转发功能
网关为docker 0 ( 可以使用ip a进行查看)
iptables的NAT表中的prerouting链
DNAT:做端口映射。
如-p和-P其实就是顶层调iptables来进行发布端口。
注意:在端口映射的时候千万不可以与物理机当前的端口发生冲突。
2 、host网络模式:容器和物理共享同一个网络命令空间。
所有的网络参数和物理机一样,容器喝物理机共用一个IP。
这个网络模式让我们在发布服务的时候不需要做端口映射
3 、container网络模式:
新建立的容器会和一个已有的容器(注意这个容器的网络模式必须是bridge)共享同一个IP;
通信的效率会增加,减少了网络的消耗(arp消耗、tcp连接消耗)
4 、none网络模式
容器不会有自己的网络命名空间,容器建立出来之后网卡啥的都没有,不能与其他容器或者物理机进行通信。
2、网络测试
2、1 Host网络
┌─[ docker-node1] ─[ ~]
└──╼ docker run -tid --net = host nginx:1.24
┌─[ docker-node1] ─[ ~]
└──╼ netstat -tlnup | grep 80
tcp 0 0 0.0 .0.0:80 0.0 .0.0:* LISTEN 5105 /nginx: master
┌─[ docker-node1] ─[ ~]
└──╼ curl localhost
< ! DOCTYPE html>
< html>
< head>
< title> Welcome to nginx! < /title>
< style>
2.2、container网络
┌──[ docker-node1] ─[ ~]
└──╼ docker run -tid --net = container:ff03 nginx:1.24
┌─[ docker-node1] ─[ ~]
└──╼ docker inspect focused_burnell | grep -i "networkmode"
"NetworkMode" : "container:ff031f089a6ca7b932233d464390176096d39895becd748202c25386f4ca4921" ,
2.3、none网络
┌──[ docker-node1] ─[ ~]
└──╼ docker run -tid --net = none:ff03 nginx:1.24
┌──[ docker-node1] ─[ ~]
└──╼ docker inspect condescending_benz | grep -i "networkmode"
"NetworkMode" : "none" ,