docker 基本操作:
容器生命周期:
1、检查本地是否存在镜像,如查不存在从远端仓库检索 2、利用镜像启动容器 3、分配一个文件系统,并在只读的镜像层外挂载一层读写层 4、从宿主机配置的网桥接口中桥接一个虚拟接口到容器 5、从地址池配置一个IP地址给容器 6、执行用户指定的指令 7、执行完毕后容器终止
查看命令
查看 docker 信息
docker info
查看镜像
docker search mysql
登录镜像仓库(默认官方仓库)
docker login -u 用户名 -p 密码
docker logout
查看版本信息
docker version
查看本地镜像
docker images
查看所以容器列表
docker ps -a
查看container 详细信息:
docker inspect 72cfd15cd4c6
镜像拉取
docker pull docker.io/library/hello-world:latest
docker pull nginx:1.12.2
docker tag 4037a5562b03 ll/nginx:v1.12.2
拉取SQL Server 镜像
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Passw0rd" \
-p 1433:1433 --name sql1 -h sql1 \
-d \
mcr.microsoft.com/mssql/server:2017-latest
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Passw0rd"
run 命令
注解
docker run [options] image [command][arg...]
-i 交互
-t 终端
-d 后台运行
--rm 退出删除容器
--name 指定容器名称
image 运行镜像
command 启动运行的命令
后台启一个镜像
docker run -d image_id
以交互进行容器终端,并返回一个sh,再退出时删除此容器
docker run --rm -it 083d7564d904 /bin/sh
在容器内执行 /bin/echo hello 命令
docker run --rm 083d7564d904 /bin/echo hello
运行容器在后台sleep 300
docker run -d --name test ubuntu /bin/sleep 300
映射端口:
docker run -p 容器外端口:容器内端口
docker run -d -p81:80 --rm --name mynginx ll/nginx:v1.12.2
netstat -luntp|grep 81
挂载数据卷:
docker run -v 容器外目录:容器内目录
mkdir html
cd html
wget www.baidu.com -O index.html
docker run -d -p82:80 --rm -v/root/html:/usr/share/nginx/html --name mynginx_baidu ll/nginx:v1.12.2
传递环境变量:(解决信息孤岛,云原生)
docker run -e 环境变量key=环境变更value
docker run --rm -e E_OPTS=abcd -e C_OPTS=bcd ubuntu printenv
容器操作
进入容器
docker exec -it container_id /bin/sh
删除容器
docker rm container_id
重启容器
docker restart container_id
停止容器
docker stop container_id
启动容器
docker start container_id
容器内安装软件:
1、进入容器
docker exec -it mynginx_baidu /bin/bash
2、使用包管理工具
yum/apt-get/apt等
3、更新yum 源
update repository:
tee /etc/apt/sources.list <<EOF
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates non-free contrib
EOF
4、安装工具
install curl:
apt-get update && apt-get install curl -y
5、提交容器变更
commit:
docker commit -p container_id ll/nginx:curl
6、push 上传
push:
docker push ll/nginx:curl
Docker file 的规则:
格式规则:
- #为注释
- 强烈建议:大写是指令,小写是内容 Docker 自上而下执行 Docker 第一个指令必须是FROM 指令,用于为镜像文件构建过程中,指定基准镜像,后续的指定指令运行于此基准镜像所提供的运行环境中:
- 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build 会在docker 主机(本地)上查找指定的镜像文件,当其在本地不存在时,则会从Docker registry(远端)拉取所需镜像文件.
4组核心的Dockerfile指令
- USER/WORKDIR指令 # whoami/pwd 验证
- ADD/EXPOSE指令 # 添加文件/暴露端口
- RUN/ENV指令 # 构建镜像时执行指令/声明变量
- CMD/ENTRYPOINT指令 # 启动容器时执行指令/容器入口脚本
Dockerfile
FROM ll/nginx:v1.12.2
USER root
WORKDIR /usr/share/nginx/html
docker build . -t ll/nginx:v1.12.2_dockerfile
将当前index.html 输出到 指定目录
ADD index.html /usr/share/nginx/html/index.html
输出 80 端口
EXPOSE 80
docker 四种网络模型
- NAT(默认)
- None(无网络) --net=none
- Host(docker和宿主同用一个网络) --net=host
- 联合网络(两个容器共享一个网络命名空间:共用一个IP) --net container:container_id
|