ubuntu 安装
更新 apt 包索引。
sudo apt-get update
安装 apt 依赖包,用于通过HTTPS来获取仓库:
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
添加 Docker 的官方 GPG 密钥:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
使用以下指令设置稳定版仓库
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
$(lsb_release -cs) \
stable"
更新 apt 包索引。
sudo apt-get update
sudo apt-get install docker-ce
可能默认安装最新版会确实依赖库,导致安装失败,可以指定docker版本就不会失败,查询本地缓存源支持的列表,然后指定版本安装
查看自己能安装的版本
apt-cache madison docker-ce
sudo apt-get install docker-ce=<VERSION_STRING>
docker timeout 解决办法.
配置代理,此处为阿里云的镜像,可选其他的.
{
"registry-mirrors": [
"https://khec465u.mirror.aliyuncs.com"
]
}
使用 python 镜像
在 ~/python/myapp 目录下创建一个 helloworld.py 文件,代码如下:
#!/usr/bin/python
print("Hello, World!");
运行容器
runoob@runoob:~/python$ docker run -v $PWD/myapp:/usr/src/myapp -w /usr/src/myapp python:3.5 python helloworld.py
命令说明:
-v $PWD/myapp:/usr/src/myapp: 将主机中当前目录下的 myapp 挂载到容器的 /usr/src/myapp。
-w /usr/src/myapp: 指定容器的 /usr/src/myapp 目录为工作目录。
python helloworld.py: 使用容器的 python 命令来执行工作目录中的 helloworld.py 文件。
输出结果:
Hello, World!
使用php镜像
在 ~/php_project 目录下创建一个 helloworld. 文件,代码如下:
<?
echo "hello world";
运行容器
docker run -v $PWD/php_project:/usr/src/myapp -w /usr/src/myapp php:5.6-fpm php helloworld.php
命令说明:
-v $PWD/myapp:/usr/src/myapp: 将主机中当前目录下的 myapp 挂载到容器的 /usr/src/myapp。
-w /usr/src/myapp: 指定容器的 /usr/src/myapp 目录为工作目录。
php helloworld.php: 使用容器的 php 命令来执行工作目录中的 helloworld.php 文件。
输出结果:
hello world
常用命令
停用并删除所有容器
docker stop $(docker ps -q) && docker rm $(docker ps -aq)
启动容器例子
模板:docker run 参数… 镜像名:版本号 命令
docker run -it --name mygorpc -v /Users/mac/golangStudy:/go/golangStudy grpc/go:latest /bin/bash
-i 交互
-t 终端
-d 后台运行
–name 容器命名
-v 宿主机的目录映射到容器机里面的目录
查看所有容器
docker ps -a
启动已经存在的容器
docker start 容器名或者容器id
进入已经启动的容器
docker exec -it 容器名或者容器id bash
docker exec -it mygorpc bash
run 和start和exec的区别
1.docker run
docker run只有在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器的时候,只需要使用命令docker start就可以。
docker run相当于执行了两步操作:将镜像(Image)放到容器(Container)中,这一步过程叫做docker create,然后将容器启动,使之变成运行时容器(docker start)。
命令模板是:docker run 参数 镜像名
2.docker start
docker start的作用是:重新启动已经存在的容器。也就是说,如果使用这个命令,我们必须先要知道这个容器的ID、或者这个容器的名字,我们可以使用docker ps命令找到这个容器的信息。
命令模板是:docker run 参数 容器名
3.exec 是进入已经存在的容器
命令模板是:docker exec 参数 容器名
Dockerfile
Dockerfile是为了构建镜像
例子
FROM nginx:latest
USER nginx
EXPOSE 80
ADD index.html /usr/share/nginx/html/index.html
WORKDIR /usr/share/www
ENV myenv 99999
RUN mkdir /usr/share/nginx/html/dir2
RUN yum install -y vim # 容器构建时需要运行的命令
CMD echo "Hello world"
FROM 拉取的镜像源
USER 容器里的用户名,以这个用户名登录
WORKDIR 类似cd到某目录,进入容器后就在此目录
EXPOSE 是暴露端口,不怎么好用,和-P配合使用,-P是随机生成宿主机和容器的映射
ENV 给镜像写环境变量
RUN 是镜像构建的时候跑的命令,比如安装vim
CMD 是容器启动是执行的命令
CMD看到的效果是 docker run -it -P --name centos_v8 centos/centos:v8
意思是如果不指定centos/centos:v8后面执行的命令,会默认执行CMD的命令
后面没有带bash,则容器在run时会自动执行Dockerfile的CMD指令,从而输出Hello world
一个Dockerfile中只能有一条CMD指令。如果你列出一个以上的CMD,那么只有最后一个CMD会生效。
ENTRYPOINT和CMD的区别,ENTYPOINT会把原CMD的内容作为参数
ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数
参考: https://www.cnblogs.com/reachos/p/8609025.html
https://www.cnblogs.com/hao-ran/p/11529619.html
构建镜像
docker build . -t nginx/nginx:v2
构建只会是镜像的构建,不涉及容器
自己的docker命令操作记录汇总
docker rm -f nginx_v2 && docker run -it -P --name nginx_v2 nginx/nginx:v2 bash
docker build . -t nginx/nginx:v2
docker exec -itd nginx_v2 nginx
docker build . -t centos/centos:v8
docker rm -f centos_v8 && docker run -it -P --name centos_v8 centos/centos:v8 bash
推荐文章
docker-compose 使用
删除容器
docker-compose down
启动容器
docker-compose up -d
在docker-comose.yml目录执行的哦
docker-comose.yml 模板
version: '3'
services:
stark-tools:
container_name: test-tools
image: my/test-tools:3.0
ports:
- "2345:2345"
- "10013:10013"
- "55098:55098"
- "55879:55879"
- "56249:56249"
- "58942:58942"
- "56935:56935"
volumes:
- ~/go/pkg:/go/pkg
- D:\go_project\src:/go/src
restart: always
stdin_open: true
tty: true
# entrypoint: ["ls", "-la", "/root/.ssh/id_rsa"]
command:
- /bin/bash
- -c
- |
mkdir test333
sh
environment:
- GOPATH=/go
- GO_ENV=dev
- APOLLO_META_SERVER_URL=http://119.23.207.60:8080
- ETCDV3_SERVER_URLS=http://139.196.98.138:2379
php-grpc-gen:
container_name: php-grpc-gen
image: chrisdowson/php-grpc-gen:1.30.0
volumes:
- D:\go_project\src:/go/src
restart: always
stdin_open: true
tty: true
# 初始化go环境