top of page

Docker学习总结

我把docker的命令分为三大类型

  1. images管理:包括pull push这类指令

  2. docker运行:主要run ps rm运行和管理容器指令

  3. DockerFile编写:包括compose以及DockerFile和yml的编写

Chapter1

>docker pull busybox#下载busybox image

>docker images#展示所有镜像

>docker login#登录docker hub

>docker push [yourusername]/catnip#上传到自己的镜像库catnip image



Chapter2

run

>docker run busybox#运行busybox

>docker run busybox echo "hello from busybox"#运行并输出"hello from busybox"

>docker run -it busybox sh#-it表示交互模式,sh有什么用呢?

>docker run --rm -it prakhar1989/static-site#--rm表示关闭的时候自动终结该container


>docker run -d -P --name static-site prakhar1989/static-site

#--name会为container取一个名字,-d表示后台运行,-P会随机暴露端口

>docker run -p 8888:80 prakhar1989/static-site

#-p会暴露指定映射的端口,8888表示本机端口,80表示container端口

>docker run -d --name es --net foodtrucks-net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2

#--net指定网络,用于多个container之间相互通讯

>docker run -it --rm --net foodtrucks-net yourusername/foodtrucks-web bash

不知道这里bash和sh是什么作用,其实没有也能进入交互界面

ps/rm/stop/container

ps:显示所有运行的container

>docker ps

>docker ps -a

这里我们来看一下container的构成,

  • CONTAINER ID,NAMES 不指定的时候都是随机分布的,其实NAMES可以使用--name配置.

  • IMAGE-镜像名称,有默认git hub name的话就会是7245530433/catnip格式.

  • COMMAND这里很像我们上个疑惑点 SH,BASH什么用处,还有python ./app.py 就是我们写DockerFile里面的RUN,还有echo

  • CREATED-镜像创建时间

  • STATUS-状态

rm:删除一个container

>docker rm $(docker ps -a -q -f status=exited)

>docker rmi


stop:终止,当我们用-d运行image的时候,container会在后台运行,这个时候需要手动关闭

>docker stop static-site


container:显示container./删除所有不运行的container

>docker container prune

>docker container ls


Others:

>docker port [container name]

#run命令使用-P会随机分配端口,这个时候需要使用port命令查看实际端口

>docker network ls/inspect/create


Chapter3

built&DockerFile

>docker build -t 7245530433/catnip .


Dockerfile1:

FROM python:3.8


# set a directory for the app

WORKDIR /usr/src/app


# copy all the files to the container

COPY . .


# install dependencies

RUN pip install --no-cache-dir -r requirements.txt


# define the port number the container should expose

EXPOSE 5000


# run the command

CMD ["python", "./app.py"]


Dockerfile2:

# start from base

FROM ubuntu:18.04


MAINTAINER Prakhar Srivastav <prakhar@prakhar.me>


# install system-wide deps for python and node

RUN apt-get -yqq update

RUN apt-get -yqq install python3-pip python3-dev curl gnupg

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash

RUN apt-get install -yq nodejs


# copy our application code

ADD flask-app /opt/flask-app

WORKDIR /opt/flask-app


# fetch app specific deps

RUN npm install

RUN npm run build

RUN pip3 install -r requirements.txt


# expose port

EXPOSE 5000


# start app

CMD [ "python3", "./app.py" ]


几个重要的关键词

FROM:定义系统环境/RUN和CMD都是运行命令

EXPOSE:往外暴露端口

WORKDIR:设置运行目录

ADD/COPY:复制文件,迁移文件

 
 
 

Comments


bottom of page