Docker学习笔记(1):
提示:这里可以添加学习目标
例如:一周掌握 Java 入门知识
第一章:制作一个自己的image
mkdir hello-world
cd hello-word
vi hello.c
i
#include<stdion.h>
int main(){
print("hello docker \n");
}
gcc -static hello.c -o hello
vim Dockerfile
Dockerfile中所需要的文件
FROM scratch
ADD hello/
CMD ["/hello"]
docker build -t wing/hello-world .
运行自己的image
docker run wing/hello-world
运行c语言,需要安装gcc环境
yum install gcc
yum install glibc-static
2.container:
什么时Container?
- 通过Image创建
- 在 Image layer之上建立一个container layer
- 类比面向对象:类和实例
- Image负责app的存储和分发,Container负责运行app
docker ps //查看正在运行的容器
docker ps -a //查看正在运行的容器
docker rm -id //删除容器
docker rm $(docker container ls aq) //删除所有id
创建并启动容器:
docker run -it --name=mycentos7 centos:7 /bin/bash
创建守护式容器:
docker run -it --name=mycentos2 centos:7
Dockerfile创建镜像
mkdir docker-centos-vim
cd docker-centos-vim
vim Dockerfile
FROM centos:7
RUN yum install -y vim
docker build -t wing/centos-vim
如果在制作镜像的过程中报错:
ipvc forwarding is disabled.Networking will not work.
报错的原因是:没有开启转发,网桥配置完后,需要开启转发,不然容器启动后,就会没有网络,配置
cd etc/sysctl.conf
添加
net.ipv4.ip_forward=1
3.Docker container常用语法
#FROM
表示自己制作的镜像,所使用的基础镜像
eg:
FROM centos:7
#LABEL
表示的是一些标签,例如镜像的版本,制作者
eg:
LABEL maintainer="itcast@qq.com"
LABEL version="1.0"
#RUN
表示构建镜像需要执行的命令
注:为避免无用的分层,尽量所有的命令合并成一行
eg:
RUN yum updata&&yum install -y vim \python-dev
#WORKDIR
类似于cd,没有就创建相应的文件夹或者文件
eg:
WORKDIR /ROOT ADD hello test/ #/root/test/hello
#ENV
设置常量
ENV a 5.6 //a=5.6
#RUN #CMD #ENTRYPOINT
RUN:执行命令并创建新的Image Layer
CMD: 设置容器启动后默认执行的命令和参数
- 如果docker run 指定了其他命令,CMD命令被忽略
- 如果定义了多个CMD,只有最后一个会执行。
ENTRYPOINT:设置容器启动时运行的命令
将自己的image进行发布
docker login //然后输入账号和密码
docker push wing/centos-vim
Docker私有仓库的建立
在独立的linux电脑执行
docker pull registry //拉取私有仓库镜像
启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
或者
docker run -d -p 5000:5000 --restart always --name registry registry:2
docker start registry
在自己的机器上
修改daemon.json
vi /etc/docker/daemon.json
{"insecure-registries":["宿主机ip:5000"]}
重启docker
vi /lib/systemd/system/docker.service
添加
EnvironmentFile=-/etc/docker/daemon.json
systemctl restart docker
docker push ip:5000/hello-world
拉取
docker pull ip:5000/hello-word
对于container的操作
docker exec -it id /bin/bash
docker exec -it id python
docker exec -it id ip a
docker stop id
docker inspect id
docker logs id