Docker使用了Linux的namespace技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Docker容器一般会分配一个独立的Network Namespace。
1、docker网络类型:
1.1、bridge模式(桥接):docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
1.2、host模式:容器不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
1.3、none模式:Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。docker将不会和外界的任何网络进行通讯。
1.4、container模式:新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。
2、Docker端口映射
在使用Bridge模式的时候,会涉及到一个问题,Bridge所使用的网路需要一个独立的Namespace,这就需要一种技术使容器内的端口可以在主机上访问,这种技术就是端口映射。Docker可以指定你想把容器内的某个端口可以在容器所在主机上的某一个端口之间进行映射,当你在访问主机上的端口的时候其实就是访问容器内的端口
3、进行访问
3.1、docker启动 -p 的使用: docker run -d -p 主机端口:容器端口 容器的名称
比如:docker run -d -p 8080:80 hub.c.163.com/library/nginx
3.2、停止docker:docker stop 容器Id
3.3、docker启动 -P 的使用(所有的监听端口都会和主机建立一个映射): docker run -d -P 容器名称
Docker run -d -p 8080:80 IMAGE,默认桥接模式小p端口映射
Docker run -d -P(注意这里是大写) IMAGE(容器名称) docker开放所有随机端口映射到容器上
常用Docker命令
docker cp index.html id://usr/xuan/nginx/html
docker commit -m "fun" id nginx-fun
docker rmi id
docker images
docker ps
docker stop id
docker rm id
docker search whalesay
docker pull whalesay
docker push
docker build -t jpres .
docker run -d -p 8888:8080 jpress
docker restart id
// 拷贝文件夹下所有文件到镜像中的某个文件夹中
docker cp ./h5/ 09dbfd2329dd:/usr/share/nginx/html
// 镜像指令
docker run -it --name=c1 centos:7 /bin/bash
docker run -id --name=c2 centos:7
docker exec -it c2 /bin/bash
docker stop c2
docker ps -aq
docker rm `docker ps -aq`
docker inspect c2
// 数据卷
docker run -it --name=c1 -v /Users/xuan/Documents/Study/Docker/Demo/data:/root/data_container /bin/bash
// 创建redis镜像
docker run -id --name=x_redis -p 6379:6379 redis
// 容器转镜像
docker commit id c_tomcat:1.0
docker save -o c_tomcat.tar c_tomcat:1.0
docker load -i c_tomcat.tar
//创建nginx镜像
docker pull mysql:1.20.1
docker run -d -p 8080:80 --name=x_nginx nginx:1.20.1
docker exec -it id bash
which nginx
ps -ef
netstat -na|grep 8080
// 创建mysql镜像
docker pull mysql:8.0.29
docker run -p 3306:3306 --name x_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.29
docker ps
mysql -u root -p
docker exec -it x_mysql /bin/bash
mysql -u root -p
Node的Dockerfile配置
# from 构建镜像的基础源镜像 该image镜像文件继承官方的node image
FROM node
# 在容器中创建一个目录
RUN mkdir -p /usr/src/app/
# 定位到容器的工作目录
WORKDIR /usr/src/app/
# RUN/COPY是分层的,package.json 提前,只要没修改就不会重新安装包
COPY package.json /usr/src/app/package.json
RUN cd /usr/src/app/
RUN npm i
# 把当前目录下所有的文件拷贝到 Image 的 /usr/src/app/目录下
COPY . /usr/src/app/
EXPOSE 3000
CMD npm run dev








网友评论