docker命令和操作笔记
选一台linux机器,或者aws cloud上面选择一个ubuntu的ec2机器,本地电脑上安装MobaXterm或其他连接远程linux机器的界面工具。然后执行以下命令,熟悉docker。
1. 更新ubuntu的源
sudo apt-get update
2. 安装必要的包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
3.接着下载
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4.接着下载
sudo add-apt-repository \
"deb [arch=amd64]" https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
5. 接着执行
sudo apt-get update
6.接着执行以下命令,安装docker-ce, 因为docker-ce是免费版
sudo apt-get install docker-ce
7. 接着下载和启动一个image
docker pull hello-world 或者 docker image pull hello-world(这个hello-world的image是dockerhub上一个image)
sudo docker run hello-world
sudo groupadd docker (groupadd是将当前用户添加到docker组)
8. 安装nginx的image
sudo docker image pull nginx:latest
9. 查看现在下载的image
docker images
10.进入root目录,这样执行每条命令,就不用加这个sudo的前缀了
sudo su -
11. 使用conainer启动image
docker container run -itd --name web-server-nginx -p 8080:80 nginx:latest (其中web-server-nginx为你想给此次创建以及启动的container命的container名字,8080宿主机的端口,80是容器container的端口,浏览器访问是通过宿主机的8080端口访问,nginx:latest 是启动此container用到的镜像image)
执行完上面的命令,会返回一个container id,为 9b2daf782f1313985797588784ef03d323cf7aee8186820a07d975ee8cac3154
12. 查看所有container
docker ps -a
13. docker 的三个阶段
(1)用dockerfile打包 build
(2)用docker image传输 ship
(3)用docker run 跑起来image,即container run
14.docker ci端最常用的两个命令
docker run
docker pull
15. 新建文件夹 + Dockerfile文件
用nano或者vm打开Dockerfile文件,
添加内容
ARG CODE_VERSION=16.04
FROM ubuntu:${CODE_VERSION}
RUN apt-get update -y
CMD ["bash"]
16. 执行上面的文件,创建当前目录下所有代码的image
docker build -t img_from . (此命令中 img_from是打包好的image的名字,最后面的小点. 表示dockerfile所在的当前目录的所有文件,也就是把此目录下所有文件打包成image)
17.返回name为imageName的image的id
docker run -itd --name cont_run-env imageName (运行名字为imageName的image,并将此次运行image的container命名为cont_run-env)
18. docker image分层
cmd layer
expose layer
workdir layer
run layer
base image layer
bootfs
19. docker search python:3.6
可以看到dockerhub上 python 3.6的所有信息,包括发布日期等
20. docker search --format "table {{.Name}}\t{{.Description}}\t{{.IsOfficial}}" registry
过滤查询用--format 或者 filter
21. docker login
docker tag nginx:latest cerule/repo-nginx:cc-nginx(其中cerule/repo-nginx是repository名字,cc-nginx是tag的名字)
这句命令应该是列出 将 nginx:latest 的image,复制粘贴出来一份,并将标签改为 cerule/repo-nginx:cc-nginx
22. docker image push cerule/repo-nginx:cc-nginx
将标签为cerule/repo-nginx:cc-nginx 的image,push到github
23. 查看历史或者细节 history or inspect
docker image history cerule/repo-nginx:cc-nginx
docker image inspect --format "{{json .Config}}" ubuntu > inspect_ubuntu.txt
docker image inspect ubuntu:latest
24. 删除image
docker image rm nginx:1-alphine-perl
docker image rmi 3666666(image id)
25. 创建container
docker conainer create -it --name cc-busya busybox:latest(其中busybox:latest为镜像名,cc-busya为container的名字)
再执行下面这句:会先执行run,之后一旦此container stop了,就自动把它删除
docker container run -itd --rm --name cc-busyb busybox:latest
26. docker container start cc-busya
docker run = docker create + docker start
docker container stop cc-busyb
docker container restart --time 5 cc-busyboxa(5秒后重启此container)
docker container rename cc-busyboxa my-busybox(不会导致重启或者重新计时)
docker container attach my-busybox 会导致其stop掉
docker container attach的作用是 进入container内部去看看,比如查查日志,执行些操作等
/ #
进入另外一个窗口
exit
退出这个窗口
docker exec -it my-busybox pwd
得到结果 / ,也就是此container的根目录,docker ps -a,可以发现此container起来了
27. map 端口port
docker container run -itd --name cont_nginx -p 8080:80/tcp img_expose
docker container run -itd --name cont_nginxa -P img_expose
同一个镜像,启动了两个container,浏览器就可以通过两个端口 访问到同一个资源
28.删除container
docker container rm cont_from
docker container rm 68xxxx 087xxx 915xxx(stop了的container id)
29. docker container prune(删除所有stop状态的container)
30. docker network drivers 用来container之间互相通信的
host,bridge,overlay(swarm或kubenetes)
31. docker network create --driver bridge my-bridge
返回id
docker network create --driver bridge --subnet=192.168.0.0/16 --ip-range=192.168.5.0/24 mybridge1
docker network ls
docker network ls --filter driver=bridge
docker start启动一个container, myubuntu
然后执行 docker network connect mybridge1 myubuntu
docker container inspect myubuntu
docker container run -itd --network host --name cont_nginx nginx:latest(其中nginx:latest是image名字,cont_nginx是container名字)
docker container port cont_nginx
docker network inspect bridge
docker network disconnect mybridge myubunu
32. docker volume 永久存储
docker volume create vol-busybox
此命令返回vol-busybox这个名字
docker run -d --volume vol-ubuntu:/tmp ubuntu 也会创建一个volume,此命令创建的volume名字是vol-ubuntu,保存数据到宿主机的/tmp路径下,启动的image是ubuntu
所以用 docker volume ls 可以查看所有volume
docker volume ls --filter "dangling=true"
过滤出没有挂载mount到任何container的volume
docker volume inspect vol-ubuntu
查看此volume的详情
docker volume rm vol-ubuntu
删除,如果被mout上container上的,拒绝删除
docker container rm dockernamess
33. 下载docker compose
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker compose version 查看是否安装成功
34. docker-compose.yaml文件里的配置
version: 3.3
services:
db:
image: mysql:5.7 (下载的数据库的镜像image的名称)
container_name: mysql_database (容器container的名称)
volumes:
-db_data:/var/lib/mysql (其中db_data是volume的名字,/var/lib/mysql是宿主机的路径)
restart: always (当container挂掉,选择 always自动重新)
environment:
MYSQL_ROOT_PASSWORD: wordxxx
MYSQL_DATABASE: wxxx
MYSQL_USER: usxxx
MYSQL_PASSWORD: xxxx
mywebxx:
depends_on:
- db
image: mywebxx:latest
container_name: conxxx
volumes:
- mywebxx_files:/var/www/html (其中mywebxx_files是volume的名字,/var/www/html是宿主机上的存储位置)
ports:
- "8080:80"
restart: always
environment:
MYWEBXX_DB_HOST: db:3306
MYWEBXX_DB_USER: userxx
MYWEBXX_DB_PASSWORD: xxx
volumes:
mywebxxx_files:
db_data:
原文链接:https://blog.csdn.net/daiqinge/article/details/103144869