Docker 使用手册

Docker要隔离的的6种 nameSpace:

UTS    主机和域名

IPC     信号量、消息队列和共享内容

PID     进程编号

network   网络设备、网络栈、端口等

mount    挂载点(文件系统)

user     用户和用户组

一、注册Docker用户

链接: docker.hub.

二、Docker镜像管理

1、连接docker.hub

命令:

docker login docker.io

在这里插入图片描述

2、搜索一个镜像

docker search alpine

3、下载一个镜像

docker pull alpine

也可以指定tag,例:

docker pull alpine:3.10.1

未登录docker.hub和私有仓库的下载方式:

docker pull docker.io/library/alpine:3.13.3
  • 镜像的结构registry_name/repository_name_image_name:tag_name
  • 例如:docker.io/library/alpine:3.13.3

4、查看本地镜像

docker images

在这里插入图片描述

5、给docker打tag(用到了上图的 IMAGE ID 和镜像结构)

docker tag 302aba9ce190 docker.io/albatross7/alpine:v3.13.3

6、推送镜像

docker push docker.io/albatross7/alpine:v3.13.3

7、查看本地有多少个alpine

docker images | grep alpine

8、删除镜像标签

docker rmi docker.io/albatross7/alpine:v3.13.3

9、删除镜像

docker rmi 302aba9ce190 

10、强制删除镜像

docker rmi -f 302aba9ce190 

三、Docker容器基本操作

1、查看docker本地容器的进程

docker ps -a

2、实例化容器(运行镜像)

docker run 是日常使用最频繁的命令之一,同样也是较为复杂的命令之一
命令格式:docker run [OPTIONS]IMAGE[COMMAND][ARG...]

OPTIONS:选项
-i:表示启动一个可交互的容器,并持续打开标准输入
-t:表示使用终端关联到容器的标准输入输出上
-d:表示将容器放置后台运行
--rm:退出后立即删除容器
--name:表示定义容器唯一名称

IMAGE:表示要运行的镜像

COMMAND:表示启动容器时要运行的命令*

3、交互式启动一个容器

docker run -ti alpine /bin/sh
  • 关闭一个容器
//退出当前容器
exit 

4、交互式启动一个容器

docker run -ti alpine /bin/sh
  • 关闭一个容器
//退出当前容器
exit 

5、非交互式启动容器

//--rm 启动完成直接删除容器
docker run --rm albatross7/alpine /bin/echo hello

6、非交互式容器

docker run -d --name myalpine1 albatross7/alpine:v3.13.3 /bin/sleep 300

7、进程查询

ps aux|grep sleep|grep -v grep

8、进程查询

]# docker exec -ti 2e3441da52d2 /bin/sh
/ # pa aux
/bin/sh: pa: not found
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 /bin/sleep 300
    7 root      0:00 /bin/sh
   14 root      0:00 ps
/ # exit

9、启动、停止、重启容器

//如果使用了--name myalpine 可以直接用
docker start/stop/restart myalpine
//如果没有设置名字,则使用容器ID
docker start/stop/restart [CONTAINER ID]

10、删除容器

//如果使用了--name myalpine 可以直接用
docker rm myalpine
//如果没有设置名字,则使用容器ID
docker rm [CONTAINER ID]
//强制删除容器
docker rm -f [CONTAINER ID]
//使用脚本删除所有Exit的容器
for i in `docker ps -a|grep -i exit|awk '{print $1}'`;do docker rm -f $i;done

11、修改容器

11.1. 进入容器

docker exec -it myalpine2 /bin/bash

11.2. 创建一个文件写入hello

echo hello > 1.txt 
exit

11.3. 提交容器

docker commit -p myalpine2 albatross7/alpine:v3.13.3_with_1.txt

11.4. 导入导出镜像

//导出
docker save 0d50832ba0fa > alpineLv3.13.3_with1.txt.tar
//导入
docker load < alpineLv3.13.3_with1.txt.tar
//导入的镜像没有标签,从新加
docker tag 0d50832ba0fa albatross7/alpine:v3.13.3_with_1.txt

11.5. 查看容器日志

//屏蔽当前容器控制台输出(不屏蔽也可以看log)
docker run hello-world 2>&1 >>/dev/null
//-f 动态输出
[root@localhost ~]# docker logs -f 56270cec3974

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
   (amd64)
3. The Docker daemon created a new container from that image which runs the
   executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
   to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

12、所有级别的容器命令

docker中 启动所有的容器命令
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

docker中 关闭所有的容器命令
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

docker中 删除所有的容器命令
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)

docker中 删除所有的镜像
docker rmi $(docker images | awk '{print $3}' |tail -n +2)

四、Docker容器高级操作**

准备操作 -----> 安装nginx

docker nginx:1.16.1
//加标签
docker tag dfcfd8e9a5d3 albatross7/nginx:v1.16.1

1.映射端口 *

// docker run -p 容器外的端口:容器里的端口
docker run --rm --name myNginx -d -p81:80 albatross7/nginx:v1.16.1
//查看监听端口
netstat -luntp|grep 81
//抓取网页
curl 127.0.0.1:81

2、挂载数据卷

//创建目录
mkdir html
//进入目录
cd html
//下载百度首页
wget www.baidu.com -O index.html

// docker run -v 容器外目录:容器内目录
docker run --rm --name baiduNginx -d -p82:80 -v/root/html:/usr/share/nginx/html albatross7/nginx:v1.16.1
//查看系统容量命令:
df -h
//查看容器内部挂载
//docker inspect 容器ID |grep 挂载目录关键字
docker inspect b0237d6c00a4|grep share

3、传递环境变量**

//-e 变量key=变量value 单个
docker run --rm -e E_OPTS=abcsefg albatross7/nginx:v1.16.1 printenv
//-e 变量key=变量value -e 变量key=变量value 多个
docker run --rm -e E_OPTS=abcsefg -e C_OPTE=123456 albatross7/nginx:v1.16.1 printenv

4、容器内安装软件*****

//进入容器
docker exec -it b0237d6c00a4 /bin/bash
//更改下载源
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 main non-free contrib
EOF
//更新	apt
apt update
//安装软件apt install 软件
apt install curl
//执行提交
docker commit -p 113765fbf88a albatross7/nginx:curl
//push
docker push albatross7/nginx:curl

五、Dockerfile

1、Dockerfile概述

  • Docker引擎可以从Dockerfile中读取指令,帮助我们自动化构建镜像。
  • Dockerfile本质是一个的文本文件,它包含了一个用户编写的指令,帮助你去组装一个镜像。
  • 使用docker bulid命令,就可以根据Dockerfile自动化构建一个镜像。

2、Dockerfile的规则

  • 格式
    • #为注释
    • 指令(大写)内容(小写)
    • 尽管指令是大小写不敏感的,但是我们还是建议安照这个规范进行。
  • Docker是按顺序执行Dockerfile里的指令集合的(从上到下依次执行)
  • 每一个Dockerfile的一个非注释行指令,必须是"FROM"指令,用于为镜像文件构建过程中,指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境中
    • 实践中,基准镜像可以是任何可用的镜像文件,默认情况下,docker bulid会在docker 主机(本地)上查找指定的镜像文件,当镜像在本地不存在时,则会从Docker registry(远端)上拉取所需镜像文件

3、Dockerfile指令

3.1 USER/WORKDIR指令

  • 指明PID为1的进程所在用户
//编辑Dockerfile文件
vi /data/dockerfile/Dockerfile
FROM docker.io/albatross7/nginx:curl
USER root
WORKDIR /usr/share/nginx/html
  • 构建镜像指令
// . 指当前目录下 -t 加一个tag
docker build . -t docker.io/albatross7/nginx:curl_with_user_workdir
//启动并查看当前用户
docker run --rm --name myNginx -it albatross7/nginx:curl_with_user_workdir /bin/bash
root@5d1e9e981171:/usr/share/nginx/html# whoami
root
root@5d1e9e981171:/usr/share/nginx/html# pwd
/usr/share/nginx/html

3.2 ADD/EXPOSE指令

  • ADD : copy
  • EXPOSE : 定义容器中的哪个端口要被暴露出来
vi /data/dockerfile/Dockerfile
FROM docker.io/albatross7/nginx:curl
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
//--启动后(这里启动失败了,没继续尝试)查看端口
netstat -l

3.3 RUN/ENV指令

  • RUN: 构建镜像时执行一系列操作
  • ENV: 环境变量
vi /data/dockerfile/Dockerfile
FROM centos:7
ENV VER 9.11.4
RUN yum install bind-$VER -y

3.4 CMD/ENTRYPOINT指令

  • CMD: 启动容器时运行一系列操作
  • ENTRYPOINT: 环境变量
vi /data/dockerfile/Dockerfile
FROM centos:7
CMD ["httpd","-D","FOREGROUND"]
RUN yum install httpd -y

3.5 Dcokerfile

FROM 192.168.8.33/public/jdk:v1.8
MAINTAINER sunjie

ARG JAR_FILE

COPY ./target/classes/ /project/blackspider/config/
COPY ${JAR_FILE} /project/blackspider/blackspider.jar

#设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

RUN chmod 755 /project/blackspider/config/
EXPOSE 9083

WORKDIR /project/blackspider/
ENTRYPOINT ["java","-Xms512m","-jar","/project/blackspider/blackspider.jar"]

六、Docker的网络模型

  • NAT(默认)
docker run --rm -it nginx:1.16.1 /bin/bash
//docker的base镜像只包含简单的操作系统,其他命令需要自己安装:
apt update && apt install -y iproute2
//查看ip
ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
  • None
docker run --rm -it --net=none nginx:1.16.1 /bin/bash
//查看ip
ip add
  • Host
docker run --rm -it --net=host nginx:1.16.1 /bin/bash

  • 联合网络*
  • 两个容器共享一个命名空间
//初始化一个容器
docker run -d nginx:1.16.1
//查看当前运行的容器
docker ps -a
//启动一个联合网络
docker run -it --rm --net=container:d8fcc0141d12 nginx:1.16.1 /bin/bash

Dockerfile示例

FROM 192.168.8.33/public/jdk:v1.8
MAINTAINER sunjie

ARG JAR_FILE

COPY ./target/classes/ /project/blackspider/config/
COPY ${JAR_FILE} /project/blackspider/blackspider.jar

#安装时区数据 tzdata
RUN apk add -U tzdata
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN chmod 755 /project/blackspider/config/
EXPOSE 9083

WORKDIR /project/blackspider/
ENTRYPOINT ["java","-Xms512m","-jar","/project/blackspider/blackspider.jar"]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

♪-Interpretation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值