命令大全
基本安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 yum -y install docker systemctl start docker systemctl enable docker.service systemctl status docker cat <<EOF > /etc/docker/daemon.json { "registry-mirrors" : [ "https://ysgursum.mirror.aliyuncs.com" ] } EOF systemctl daemon-reload systemctl restart docker
容器的使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 docker logs [指令] [容器id/容器名称] docker ps -a (该命令为旧命令) docker container ls -a (新命令,为了方便记忆)docker ps (该命令为旧命令) docker container ls (新命令,为了方便记忆)docker exec -it [容器id] /bin /bash docker attach [容器id] exit docker rm -f [容器id] docker start [容器id] docker stop [容器id] docker restart [容器id]
安装mysql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 docker search mysql docker pull mysql docker images 此命令会将挂载的目录的文件更新全部发生在宿主机, 容器中为空目录 docker run -p 3306 :3306 --name mysql \ -v /usr/ local/docker/ mysql/conf:/ etc/mysql \ -v /usr/ local/docker/ mysql/logs:/ var/log/ mysql \ -v /usr/ local/docker/ mysql/data:/ var/lib/ mysql \ -v /usr/ local/docker/ mysql/mysql-files:/ var/lib/ mysql-files \ -e MYSQL_ROOT_PASSWORD=[新密码] \ -d mysql docker exec -it mysql bash mysql -uroot -p 输入密码后进入 ALTER user 'root' @'localhost' IDENTIFIED BY '新的密码' ALTER USER 'root' @'%' IDENTIFIED WITH mysql_native_password BY '新的密码' ;
Dockerfile(定制镜像)的使用 参考Docker 的官方文档
Docker Compose(快速启动服务)的使用
Docker-Compose的一些常用命令
ompose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
使用 Dockerfile 定义应用程序的环境。
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行 docker-compose up 命令来启动并运行整个应用程序。
实践 docker-compose.yml 实例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #docker-compose 版本 version: "3.9" services: mysql: # docker重新启动 该容器也重新拉起 restart: always container_name: mysql image: mysql:latest ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: Mp*ty811Gu volumes: - "/usr/local/docker/mysql/conf:/etc/mysql" - "/usr/local/docker/mysql/logs:/var/log/mysql" - "/usr/local/docker/mysql/data:/var/lib/mysql" - "/usr/local/docker/mysql/mysql-files:/var/lib/mysql-files" networks: local: ipv4_address: 192.168 .5 .100 nginx: restart: always container_name: nginx image: nginx:latest #root权限 privileged: true ports: - "80:80" - "443:443" volumes: # 文件映射 , 注意如果修改了主机的文件,容器内的文件不会同步,必须重启容器 # Linux存储分为inode和block,其中inode记载了文件的属行信息,例如大小,在磁盘的什么位置 # block是4k大小的一个块,不足4k也会占用掉4k的空间 # # 而docker的挂在文件,实际是记住了一个inode,通过inode找到这个block.如果是用>追加重定向写入文件 # 是可以同步到docker中的,但如果是rm + 重命名的,文件的inode发生改变,但docker中的inode还是指向了 # 之前的磁盘位置,所以文件没有改变 # # rm原理: 删除了inode,没有inode无法正常访问文件,看起来删除了,但文件实际内容还在,直到被下次 # 写入到这里的文件内容覆盖. - "/etc/localtime:/etc/localtime:ro" - "/usr/local/docker/nginx/log:/var/log/nginx" - "/usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" - "/usr/local/docker/nginx/cert:/usr/local/nginx/cert" - "/cn/wuxiangknow/blog/public:/cn/wuxiangknow/blog/public" networks: local: ipv4_address: 192.168 .5 .101 # 配制网络,保证各个容器可以互相访问 networks: local: driver: bridge ipam: ##配制网络 driver: default config: - subnet: 192.168 .5 .0 /24 ## ip地址网络 这里宿主机一般会是该网段的 192.168.5.1,所以不要设置自网段为1
设置开机自启,在/etc/rc.d/rc.local
添加:
1 2 // -f 可以指定一个或多个docker-compose.yml,最后会拼在一起/usr/ local/bin/ docker-compose -f /usr/ local/docker/ docker-compose.yml up -d
异常 container_linux.go:235 执行命令doocker-compose up -d
出现以下错误
1 ERROR: for nginx Cannot start service nginx: oci runtime error: container_linux.go:235: starting container process caused "container init exited prematurely"
经尝试,去除nginx.conf即可启动正常,排除linux与docker版本不兼容问题.最后发现- "/usr/local/docker/nginx/conf/nginx.cof:/etc/nginx/nginx.conf"
存在拼写错误,修正后部署正常